[PATCH xserver 01/25] hw/xfree86: Use NotifyFd for other input fd wakeups

Keith Packard keithp at keithp.com
Wed May 25 05:38:38 UTC 2016


Remove code in xf86Wakeup for dealing with other input and switch to
using the new NotifyFd interface.

Signed-off-by: Keith Packard <keithp at keithp.com>
---
 hw/xfree86/common/xf86Events.c | 76 ++++++++++++------------------------------
 1 file changed, 22 insertions(+), 54 deletions(-)

diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 7191980..6f8d763 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -101,8 +101,6 @@ Bool VTSwitchEnabled = TRUE;    /* Allows run-time disabling for
                                  switches when using the DRI
                                  automatic full screen mode.*/
 
-extern fd_set EnabledDevices;
-
 #ifdef XF86PM
 extern void (*xf86OSPMClose) (void);
 #endif
@@ -247,45 +245,6 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
 void
 xf86Wakeup(void *blockData, int err, void *pReadmask)
 {
-    fd_set *LastSelectMask = (fd_set *) pReadmask;
-    fd_set devicesWithInput;
-    InputInfoPtr pInfo;
-
-    if (err >= 0) {
-
-        XFD_ANDSET(&devicesWithInput, LastSelectMask, &EnabledDevices);
-        if (XFD_ANYSET(&devicesWithInput)) {
-            pInfo = xf86InputDevs;
-            while (pInfo) {
-                if (pInfo->read_input && pInfo->fd >= 0 &&
-                    (FD_ISSET(pInfo->fd, &devicesWithInput) != 0)) {
-                    input_lock();
-
-                    /*
-                     * Remove the descriptior from the set because more than one
-                     * device may share the same file descriptor.
-                     */
-                    FD_CLR(pInfo->fd, &devicesWithInput);
-
-                    pInfo->read_input(pInfo);
-                    input_unlock();
-                }
-                pInfo = pInfo->next;
-            }
-        }
-    }
-
-    if (err >= 0) {             /* we don't want the handlers called if select() */
-        IHPtr ih, ih_tmp;       /* returned with an error condition, do we?      */
-
-        nt_list_for_each_entry_safe(ih, ih_tmp, InputHandlers, next) {
-            if (ih->enabled && ih->fd >= 0 && ih->ihproc &&
-                (FD_ISSET(ih->fd, ((fd_set *) pReadmask)) != 0)) {
-                ih->ihproc(ih->fd, ih->data);
-            }
-        }
-    }
-
     if (xf86VTSwitchPending())
         xf86VTSwitch();
 }
@@ -630,6 +589,16 @@ xf86VTSwitch(void)
 
 /* Input handler registration */
 
+static void
+xf86InputHandlerNotify(int fd, int ready, void *data)
+{
+    IHPtr       ih = data;
+
+    if (ih->enabled && ih->fd >= 0 && ih->ihproc) {
+        ih->ihproc(ih->fd, ih->data);
+    }
+}
+
 static void *
 addInputHandler(int fd, InputHandlerProc proc, void *data)
 {
@@ -647,6 +616,11 @@ addInputHandler(int fd, InputHandlerProc proc, void *data)
     ih->data = data;
     ih->enabled = TRUE;
 
+    if (!SetNotifyFd(fd, xf86InputHandlerNotify, X_NOTIFY_READ, ih)) {
+        free(ih);
+        return NULL;
+    }
+
     ih->next = InputHandlers;
     InputHandlers = ih;
 
@@ -658,10 +632,8 @@ xf86AddInputHandler(int fd, InputHandlerProc proc, void *data)
 {
     IHPtr ih = addInputHandler(fd, proc, data);
 
-    if (ih) {
-        AddEnabledDevice(fd);
+    if (ih)
         ih->is_input = TRUE;
-    }
     return ih;
 }
 
@@ -670,8 +642,6 @@ xf86AddGeneralHandler(int fd, InputHandlerProc proc, void *data)
 {
     IHPtr ih = addInputHandler(fd, proc, data);
 
-    if (ih)
-        AddGeneralSocket(fd);
     return ih;
 }
 
@@ -701,6 +671,8 @@ removeInputHandler(IHPtr ih)
 {
     IHPtr p;
 
+    if (ih->fd >= 0)
+        RemoveNotifyFd(ih->fd);
     if (ih == InputHandlers)
         InputHandlers = ih->next;
     else {
@@ -725,8 +697,6 @@ xf86RemoveInputHandler(void *handler)
     ih = handler;
     fd = ih->fd;
 
-    if (ih->fd >= 0)
-        RemoveEnabledDevice(ih->fd);
     removeInputHandler(ih);
 
     return fd;
@@ -744,8 +714,6 @@ xf86RemoveGeneralHandler(void *handler)
     ih = handler;
     fd = ih->fd;
 
-    if (ih->fd >= 0)
-        RemoveGeneralSocket(ih->fd);
     removeInputHandler(ih);
 
     return fd;
@@ -762,7 +730,7 @@ xf86DisableInputHandler(void *handler)
     ih = handler;
     ih->enabled = FALSE;
     if (ih->fd >= 0)
-        RemoveEnabledDevice(ih->fd);
+        RemoveNotifyFd(ih->fd);
 }
 
 void
@@ -776,7 +744,7 @@ xf86DisableGeneralHandler(void *handler)
     ih = handler;
     ih->enabled = FALSE;
     if (ih->fd >= 0)
-        RemoveGeneralSocket(ih->fd);
+        RemoveNotifyFd(ih->fd);
 }
 
 void
@@ -790,7 +758,7 @@ xf86EnableInputHandler(void *handler)
     ih = handler;
     ih->enabled = TRUE;
     if (ih->fd >= 0)
-        AddEnabledDevice(ih->fd);
+        SetNotifyFd(ih->fd, xf86InputHandlerNotify, X_NOTIFY_READ, ih);
 }
 
 void
@@ -804,7 +772,7 @@ xf86EnableGeneralHandler(void *handler)
     ih = handler;
     ih->enabled = TRUE;
     if (ih->fd >= 0)
-        AddGeneralSocket(ih->fd);
+        SetNotifyFd(ih->fd, xf86InputHandlerNotify, X_NOTIFY_READ, ih);
 }
 
 /*
-- 
2.8.0.rc3



More information about the xorg-devel mailing list