diff --git a/dix/devices.c b/dix/devices.c index 530f15d66..be236dd70 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -1055,6 +1055,25 @@ CloseDownDevices(void) OsReleaseSignals(); } +/** + * Signal all devices that we're in the process of aborting. + * This function is called from a signal handler. + */ +void +AbortDevices(void) +{ + DeviceIntPtr dev; + nt_list_for_each_entry(dev, inputInfo.devices, next) { + if (!IsMaster(dev)) + (*dev->deviceProc) (dev, DEVICE_ABORT); + } + + nt_list_for_each_entry(dev, inputInfo.off_devices, next) { + if (!IsMaster(dev)) + (*dev->deviceProc) (dev, DEVICE_ABORT); + } +} + /** * Remove the cursor sprite for all devices. This needs to be done before any * resources are freed or any device is deleted. diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h index e545c1498..1393427f8 100644 --- a/hw/xfree86/common/xf86Module.h +++ b/hw/xfree86/common/xf86Module.h @@ -81,7 +81,7 @@ typedef enum { */ #define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4) #define ABI_VIDEODRV_VERSION SET_ABI_VERSION(14, 1) -#define ABI_XINPUT_VERSION SET_ABI_VERSION(19, 0) +#define ABI_XINPUT_VERSION SET_ABI_VERSION(19, 1) #define ABI_EXTENSION_VERSION SET_ABI_VERSION(7, 0) #define ABI_FONT_VERSION SET_ABI_VERSION(0, 6) diff --git a/include/input.h b/include/input.h index 7b5ab945b..5c65597e4 100644 --- a/include/input.h +++ b/include/input.h @@ -62,6 +62,7 @@ SOFTWARE. #define DEVICE_ON 1 #define DEVICE_OFF 2 #define DEVICE_CLOSE 3 +#define DEVICE_ABORT 4 #define POINTER_RELATIVE (1 << 1) #define POINTER_ABSOLUTE (1 << 2) @@ -269,6 +270,7 @@ extern void DisableAllDevices(void); extern int InitAndStartDevices(void); extern void CloseDownDevices(void); +extern void AbortDevices(void); extern void UndisplayDevices(void); diff --git a/os/log.c b/os/log.c index 7b5c9ee1c..2697acec8 100644 --- a/os/log.c +++ b/os/log.c @@ -663,7 +663,7 @@ AbortServer(void) #endif CloseWellKnownConnections(); OsCleanup(TRUE); - CloseDownDevices(); + AbortDevices(); AbortDDX(EXIT_ERR_ABORT); fflush(stderr); if (CoreDump)