evdev: prevent double-suspending a device
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 30 Jan 2014 05:55:37 +0000 (15:55 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 18 Sep 2014 01:30:15 +0000 (11:30 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
src/evdev.c

index 054beb6..9e91ee5 100644 (file)
@@ -1168,16 +1168,23 @@ release_pressed_keys(struct evdev_device *device)
 int
 evdev_device_suspend(struct evdev_device *device)
 {
-       if (device->source)
+       if (device->source) {
                libinput_remove_source(device->base.seat->libinput,
                                       device->source);
+               device->source = NULL;
+       }
 
        release_pressed_keys(device);
 
-       if (device->mtdev)
+       if (device->mtdev) {
                mtdev_close_delete(device->mtdev);
-       close_restricted(device->base.seat->libinput, device->fd);
-       device->fd = -1;
+               device->mtdev = NULL;
+       }
+
+       if (device->fd != -1) {
+               close_restricted(device->base.seat->libinput, device->fd);
+               device->fd = -1;
+       }
 
        return 0;
 }