xf86Xinput: release server managed fd before removing the device from the list
authorHans de Goede <hdegoede@redhat.com>
Wed, 12 Mar 2014 15:00:23 +0000 (16:00 +0100)
committerHans de Goede <hdegoede@redhat.com>
Thu, 13 Mar 2014 12:11:55 +0000 (13:11 +0100)
So that the fd in use test in systemd_logind_release_fd works properly.

Note we cannot change the test inside systemd_logind_release_fd as it must
work for devices which were never added to the xf86InputDevs too.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
hw/xfree86/common/xf86Xinput.c

index 36b92a9..a367ae3 100644 (file)
@@ -766,6 +766,11 @@ xf86DeleteInput(InputInfoPtr pInp, int flags)
 
     FreeInputAttributes(pInp->attrs);
 
+    if (pInp->flags & XI86_SERVER_FD) {
+        systemd_logind_release_fd(pInp->major, pInp->minor);
+        close(pInp->fd);
+    }
+
     /* Remove the entry from the list. */
     if (pInp == xf86InputDevs)
         xf86InputDevs = pInp->next;
@@ -779,11 +784,6 @@ xf86DeleteInput(InputInfoPtr pInp, int flags)
         /* Else the entry wasn't in the xf86InputDevs list (ignore this). */
     }
 
-    if (pInp->flags & XI86_SERVER_FD) {
-        systemd_logind_release_fd(pInp->major, pInp->minor);
-        close(pInp->fd);
-    }
-
     free((void *) pInp->driver);
     free((void *) pInp->name);
     xf86optionListFree(pInp->options);