summaryrefslogtreecommitdiff
path: root/dix
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@redhat.com>2008-11-26 10:42:52 +1000
committerPeter Hutterer <peter.hutterer@redhat.com>2008-11-26 10:53:23 +1000
commit2b45602e828a07a0817691b2838cd34ffee531bd (patch)
tree88fc2f3e56a2e5635d7376b490416fef8584bd91 /dix
parent416685c295353b5816689994c7c58ae7db3e878d (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.c29
-rw-r--r--dix/main.c3
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);