diff --git a/dix/dispatch.c b/dix/dispatch.c index e11137760..3d0fe26fd 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -3406,7 +3406,6 @@ CloseDownClient(ClientPtr client) UngrabServer(client); } mark_client_not_ready(client); - xorg_list_del(&client->output_pending); BITCLEAR(grabWaiters, client->index); DeleteClientFromAnySelections(client); ReleaseActiveGrabs(client); @@ -3435,6 +3434,7 @@ CloseDownClient(ClientPtr client) if (ClientIsAsleep(client)) ClientSignal(client); ProcessWorkQueueZombies(); + output_pending_clear(client); CloseDownConnection(client); /* If the client made it to the Running stage, nClients has diff --git a/include/dixstruct.h b/include/dixstruct.h index 3b578f81a..d71b0ac05 100644 --- a/include/dixstruct.h +++ b/include/dixstruct.h @@ -159,7 +159,7 @@ extern struct xorg_list output_pending_clients; static inline void output_pending_mark(ClientPtr client) { - if (xorg_list_is_empty(&client->output_pending)) + if (!client->clientGone && xorg_list_is_empty(&client->output_pending)) xorg_list_append(&client->output_pending, &output_pending_clients); }