|
|
a3e08e |
From d9e23ea4228575344e3b4c0443cecc5eb75356e4 Mon Sep 17 00:00:00 2001
|
|
|
a3e08e |
From: Keith Packard <keithp@keithp.com>
|
|
|
a3e08e |
Date: Wed, 10 May 2017 21:50:45 -0700
|
|
|
a3e08e |
Subject: [PATCH xserver] dix: Remove clients from input and output ready
|
|
|
a3e08e |
queues after closing
|
|
|
a3e08e |
MIME-Version: 1.0
|
|
|
a3e08e |
Content-Type: text/plain; charset=UTF-8
|
|
|
a3e08e |
Content-Transfer-Encoding: 8bit
|
|
|
a3e08e |
|
|
|
a3e08e |
Delay removing the client from these two queues until all potential
|
|
|
a3e08e |
I/O has completed in case we mark the client as ready for reading or
|
|
|
a3e08e |
with pending output during the close operation.
|
|
|
a3e08e |
|
|
|
a3e08e |
Bugzilla: https://bugs.freedesktop.org/100957
|
|
|
a3e08e |
Signed-off-by: Keith Packard <keithp@keithp.com>
|
|
|
a3e08e |
Tested-by: Nick Sarnie <commendsarnex@gmail.com>
|
|
|
a3e08e |
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
|
|
|
a3e08e |
---
|
|
|
a3e08e |
dix/dispatch.c | 4 ++--
|
|
|
a3e08e |
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
a3e08e |
|
|
|
a3e08e |
diff --git a/dix/dispatch.c b/dix/dispatch.c
|
|
|
a3e08e |
index a2df1e0e6..8b371b678 100644
|
|
|
a3e08e |
--- a/dix/dispatch.c
|
|
|
a3e08e |
+++ b/dix/dispatch.c
|
|
|
a3e08e |
@@ -3414,7 +3414,6 @@ CloseDownClient(ClientPtr client)
|
|
|
a3e08e |
if (grabState != GrabNone && grabClient == client) {
|
|
|
a3e08e |
UngrabServer(client);
|
|
|
a3e08e |
}
|
|
|
a3e08e |
- mark_client_not_ready(client);
|
|
|
a3e08e |
BITCLEAR(grabWaiters, client->index);
|
|
|
a3e08e |
DeleteClientFromAnySelections(client);
|
|
|
a3e08e |
ReleaseActiveGrabs(client);
|
|
|
a3e08e |
@@ -3443,8 +3442,9 @@ CloseDownClient(ClientPtr client)
|
|
|
a3e08e |
if (ClientIsAsleep(client))
|
|
|
a3e08e |
ClientSignal(client);
|
|
|
a3e08e |
ProcessWorkQueueZombies();
|
|
|
a3e08e |
- output_pending_clear(client);
|
|
|
a3e08e |
CloseDownConnection(client);
|
|
|
a3e08e |
+ output_pending_clear(client);
|
|
|
a3e08e |
+ mark_client_not_ready(client);
|
|
|
a3e08e |
|
|
|
a3e08e |
/* If the client made it to the Running stage, nClients has
|
|
|
a3e08e |
* been incremented on its behalf, so we need to decrement it
|
|
|
a3e08e |
--
|
|
|
a3e08e |
2.13.0
|
|
|
a3e08e |
|