diff options
author | Keith Packard <keithp@keithp.com> | 2017-05-10 21:50:45 -0700 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2017-09-25 15:34:10 -0400 |
commit | 444929b446a0ef5873d6346c3f3091adb8fbe6bb (patch) | |
tree | 6173b76a3d7d5d3bac60bec4878fb54c8e461925 /dix | |
parent | d808b573992ae1fc7706d8897a92783b847040e3 (diff) |
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>
(cherry picked from commit d9e23ea4228575344e3b4c0443cecc5eb75356e4)
Diffstat (limited to 'dix')
-rw-r--r-- | dix/dispatch.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/dix/dispatch.c b/dix/dispatch.c index 78ac095b1..0da431bf9 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -3415,7 +3415,6 @@ CloseDownClient(ClientPtr client) if (grabState != GrabNone && grabClient == client) { UngrabServer(client); } - mark_client_not_ready(client); BITCLEAR(grabWaiters, client->index); DeleteClientFromAnySelections(client); ReleaseActiveGrabs(client); @@ -3444,8 +3443,9 @@ CloseDownClient(ClientPtr client) if (ClientIsAsleep(client)) ClientSignal(client); ProcessWorkQueueZombies(); - output_pending_clear(client); CloseDownConnection(client); + output_pending_clear(client); + mark_client_not_ready(client); /* If the client made it to the Running stage, nClients has * been incremented on its behalf, so we need to decrement it |