mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-26 03:00:07 +01:00
dix: block signals when closing all devices
When closing down all devices, we manually unset master for all attached devices, but the device's sprite info still points to the master's sprite info. This leaves us a window where the master is freed already but the device isn't yet. A signal during that window causes dereference of the already freed spriteInfo in mieqEnqueue's EnqueueScreen macro. Simply block signals when removing all devices. It's not like we're really worrying about high-responsive input at this stage. https://bugzilla.redhat.com/show_bug.cgi?id=737031 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Julien Cristau <jcristau@debian.org> (cherry picked from commitd7c44a7c97) (cherry picked from commit34bb83b9df)
This commit is contained in:
parent
cc9e3b3de7
commit
0c4d7fca59
1 changed files with 4 additions and 0 deletions
|
|
@ -982,6 +982,8 @@ CloseDownDevices(void)
|
|||
{
|
||||
DeviceIntPtr dev;
|
||||
|
||||
OsBlockSignals();
|
||||
|
||||
/* Float all SDs before closing them. Note that at this point resources
|
||||
* (e.g. cursors) have been freed already, so we can't just call
|
||||
* AttachDevice(NULL, dev, NULL). Instead, we have to forcibly set master
|
||||
|
|
@ -1004,6 +1006,8 @@ CloseDownDevices(void)
|
|||
inputInfo.keyboard = NULL;
|
||||
inputInfo.pointer = NULL;
|
||||
XkbDeleteRulesDflts();
|
||||
|
||||
OsReleaseSignals();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue