dix: Remove clients from input and output ready queues after closing
Delay removing the client from these two queues until all potential I/O has completed in case we mark the client as ready for reading or with pending output during the close operation. Bugzilla: https://bugs.freedesktop.org/100957 Signed-off-by: Keith Packard <keithp@keithp.com> Tested-by: Nick Sarnie <commendsarnex@gmail.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
parent
c394f6b273
commit
d9e23ea422
|
@ -3414,7 +3414,6 @@ CloseDownClient(ClientPtr client)
|
||||||
if (grabState != GrabNone && grabClient == client) {
|
if (grabState != GrabNone && grabClient == client) {
|
||||||
UngrabServer(client);
|
UngrabServer(client);
|
||||||
}
|
}
|
||||||
mark_client_not_ready(client);
|
|
||||||
BITCLEAR(grabWaiters, client->index);
|
BITCLEAR(grabWaiters, client->index);
|
||||||
DeleteClientFromAnySelections(client);
|
DeleteClientFromAnySelections(client);
|
||||||
ReleaseActiveGrabs(client);
|
ReleaseActiveGrabs(client);
|
||||||
|
@ -3443,8 +3442,9 @@ CloseDownClient(ClientPtr client)
|
||||||
if (ClientIsAsleep(client))
|
if (ClientIsAsleep(client))
|
||||||
ClientSignal(client);
|
ClientSignal(client);
|
||||||
ProcessWorkQueueZombies();
|
ProcessWorkQueueZombies();
|
||||||
output_pending_clear(client);
|
|
||||||
CloseDownConnection(client);
|
CloseDownConnection(client);
|
||||||
|
output_pending_clear(client);
|
||||||
|
mark_client_not_ready(client);
|
||||||
|
|
||||||
/* If the client made it to the Running stage, nClients has
|
/* If the client made it to the Running stage, nClients has
|
||||||
* been incremented on its behalf, so we need to decrement it
|
* been incremented on its behalf, so we need to decrement it
|
||||||
|
|
Loading…
Reference in New Issue