Abort xi2 tests if ActivateDevice() fails

I was getting segfaults in xi2 tests from trying to copy XKB keyboard
state to NULL pointers with a stack of:
    key=key@entry=0) at xkbActions.c:1189
    sendevent=sendevent@entry=0 '\000') at devices.c:420
    at protocol-xiquerydevice.c:338

which turned out to be due to xkbcomp failure, which was logged in the
test logs as:
XKB: Failed to compile keymap
Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config.

but which was overlooked because the ActivateDevice() return code wasn't
checked and the tests went forward assuming the structures were all
correctly initialized.   This catches the failure closer to the point of
failure, to save debugging time.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Alan Coopersmith 2014-09-21 09:49:05 -07:00 committed by Keith Packard
parent 95a5b92e37
commit cccba52d15

View File

@ -137,6 +137,7 @@ init_devices(void)
{
ClientRec client;
struct devices local_devices;
int ret;
client = init_client(0, NULL);
@ -145,15 +146,20 @@ init_devices(void)
inputInfo.pointer = local_devices.vcp;
inputInfo.keyboard = local_devices.vck;
ActivateDevice(local_devices.vcp, FALSE);
ActivateDevice(local_devices.vck, FALSE);
ret = ActivateDevice(local_devices.vcp, FALSE);
assert(ret == Success);
/* This may fail if xkbcomp fails or xkb-config is not found. */
ret = ActivateDevice(local_devices.vck, FALSE);
assert(ret == Success);
EnableDevice(local_devices.vcp, FALSE);
EnableDevice(local_devices.vck, FALSE);
AllocDevicePair(&client, "", &local_devices.mouse, &local_devices.kbd,
TestPointerProc, CoreKeyboardProc, FALSE);
ActivateDevice(local_devices.mouse, FALSE);
ActivateDevice(local_devices.kbd, FALSE);
ret = ActivateDevice(local_devices.mouse, FALSE);
assert(ret == Success);
ret = ActivateDevice(local_devices.kbd, FALSE);
assert(ret == Success);
EnableDevice(local_devices.mouse, FALSE);
EnableDevice(local_devices.kbd, FALSE);