[PATCH 1/4] xserver: process udev "changed" and "add" events in the same code paths
Peter Hutterer
peter.hutterer at who-t.net
Tue Jul 19 21:14:16 PDT 2011
On Mon, Jul 18, 2011 at 09:17:10PM +0200, Lennart Poettering wrote:
> udev gives no guarantee that before each "changed" event for a device
> there's an "add" event, or that before each "remove" is an "add", or
> that before each "add" there was no "add" already and so on. Users can
> trigger these events at any time with "udevadm trigger", and netlink is
> a lossy transport, hence the events can come in unexpected ordering.
>
> With other words: regardless which event is generated, the X server must
> not choke on it and make the best of it, hence make sure that if we get
> an "add" event for an existing device we don't add the device a second
> time.
> ---
> config/udev.c | 8 +++-----
> 1 files changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/config/udev.c b/config/udev.c
> index 9ac34ee..5ac52a1 100644
> --- a/config/udev.c
> +++ b/config/udev.c
> @@ -251,14 +251,12 @@ wakeup_handler(pointer data, int err, pointer read_mask)
> return;
> action = udev_device_get_action(udev_device);
> if (action) {
> - if (!strcmp(action, "add"))
> - device_added(udev_device);
> - else if (!strcmp(action, "remove"))
> - device_removed(udev_device);
> - else if (!strcmp(action, "change")) {
> + if (!strcmp(action, "add") || !strcmp(action, "change")) {
> device_removed(udev_device);
> device_added(udev_device);
> }
> + else if (!strcmp(action, "remove"))
> + device_removed(udev_device);
> }
> udev_device_unref(udev_device);
> }
> --
> 1.7.6
merged all four, thanks.
can I assume your Signed-off-by?
(I guess I don't have to since we're working for the same corp, but...)
Cheers,
Peter
More information about the xorg-devel
mailing list