[PATCH] xfree86: If an input device failed to activate, return immediately.

Peter Hutterer peter.hutterer at who-t.net
Mon Dec 22 16:17:37 PST 2008


Devices are only activated once - right after they've been added to the
server. If a device failes activation, it's dead. There's no reason to
continue. Return the error code from ActivateDevice() without setting up
sprite information or even sending a event to the client.

Then - in the DDX - just remove the device again.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 dix/devices.c                  |    2 ++
 hw/xfree86/common/xf86Xinput.c |    5 ++++-
 2 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/dix/devices.c b/dix/devices.c
index ff6f0ec..c51d9be 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -444,6 +444,8 @@ ActivateDevice(DeviceIntPtr dev)
 
     ret = (*dev->deviceProc) (dev, DEVICE_INIT);
     dev->inited = (ret == Success);
+    if (!dev->inited)
+        return ret;
 
     /* Initialize memory for sprites. */
     if (dev->isMaster && dev->spriteInfo->spriteOwner)
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index e39c087..e8acf39 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -546,7 +546,10 @@ xf86NewInputDevice(IDevPtr idev, DeviceIntPtr *pdev, BOOL enable)
     }
 
     dev = pInfo->dev;
-    ActivateDevice(dev);
+    rval = ActivateDevice(dev);
+    if (rval != Success)
+        goto unwind;
+
     /* Enable it if it's properly initialised and we're currently in the VT */
     if (enable && dev->inited && dev->startup && xf86Screens[0]->vtSema)
     {
-- 
1.6.0.4



More information about the xorg mailing list