[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