From 27011254c4de4e573a0851bf46892fb488db6522 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 23 Dec 2008 09:59:28 +1000 Subject: xfree86: If an input device failed to activate, return immediately. 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 --- dix/devices.c | 2 ++ hw/xfree86/common/xf86Xinput.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dix/devices.c b/dix/devices.c index ff6f0ec98..c51d9beef 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 e39c087e2..e8acf392a 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) { -- cgit v1.2.3