diff options
author | Peter Hutterer <peter.hutterer@redhat.com> | 2008-11-26 10:42:52 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@redhat.com> | 2008-11-26 10:53:23 +1000 |
commit | 2b45602e828a07a0817691b2838cd34ffee531bd (patch) | |
tree | 88fc2f3e56a2e5635d7376b490416fef8584bd91 /dix | |
parent | 416685c295353b5816689994c7c58ae7db3e878d (diff) |
Revert "dix: Enable core devices in InitCoreDevices already."
I merged the wrong patch. See correct patch at:
http://lists.freedesktop.org/archives/xorg/2008-November/040540.html
Not activating the device before attempting to enable it would leave the
sprite unset, crashing the server when enabling the real devices.
This reverts commit e078901a4eca02bd3e7a80d9462dafbca939a187.
Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
Diffstat (limited to 'dix')
-rw-r--r-- | dix/devices.c | 29 | ||||
-rw-r--r-- | dix/main.c | 3 |
2 files changed, 23 insertions, 9 deletions
diff --git a/dix/devices.c b/dix/devices.c index 583ecc016..afc78d81e 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -595,6 +595,8 @@ CorePointerProc(DeviceIntPtr pDev, int what) * Both devices are not tied to physical devices, but guarantee that there is * always a keyboard and a pointer present and keep the protocol semantics. * + * The devices are activated but not enabled. + * * Note that the server MUST have two core devices at all times, even if there * is no physical device connected. */ @@ -605,12 +607,6 @@ InitCoreDevices(void) &inputInfo.pointer, &inputInfo.keyboard) != Success) FatalError("Failed to allocate core devices"); - - if (inputInfo.pointer->inited && inputInfo.pointer->startup) - EnableDevice(inputInfo.pointer); - if (inputInfo.keyboard->inited && inputInfo.keyboard->startup) - EnableDevice(inputInfo.keyboard); - } /** @@ -625,7 +621,7 @@ InitCoreDevices(void) * * @return Success or error code on failure. */ -void +int InitAndStartDevices() { DeviceIntPtr dev, next; @@ -636,14 +632,31 @@ InitAndStartDevices() ActivateDevice(dev); } + if (!inputInfo.keyboard) { /* In theory, this cannot happen */ + ErrorF("[dix] No core keyboard\n"); + return BadImplementation; + } + if (!inputInfo.pointer) { /* In theory, this cannot happen */ + ErrorF("[dix] No core pointer\n"); + return BadImplementation; + } + + /* Now enable all devices */ + if (inputInfo.pointer->inited && inputInfo.pointer->startup) + EnableDevice(inputInfo.pointer); + if (inputInfo.keyboard->inited && inputInfo.keyboard->startup) + EnableDevice(inputInfo.keyboard); + /* enable real devices */ for (dev = inputInfo.off_devices; dev; dev = next) { DebugF("(dix) enabling device %d\n", dev->id); next = dev->next; if (dev->inited && dev->startup) - EnableDevice(dev); + (void)EnableDevice(dev); } + + return Success; } /** diff --git a/dix/main.c b/dix/main.c index ee2e10db5..7bd91e0c2 100644 --- a/dix/main.c +++ b/dix/main.c @@ -361,7 +361,8 @@ int main(int argc, char *argv[], char *envp[]) InitCoreDevices(); InitInput(argc, argv); - InitAndStartDevices(); + if (InitAndStartDevices() != Success) + FatalError("failed to initialize core devices"); dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); |