[PATCH xserver] dix: Remove clients from input and output ready queues after closing

Nick Sarnie commendsarnex at gmail.com
Thu May 11 17:12:27 UTC 2017


On Thu, May 11, 2017 at 12:52 AM, Keith Packard <keithp at keithp.com> wrote:
> 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.
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
Tested-by: Nick Sarnie <commendsarnex at gmail.com>
> ---
>  dix/dispatch.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/dix/dispatch.c b/dix/dispatch.c
> index a2df1e0e6..8b371b678 100644
> --- a/dix/dispatch.c
> +++ b/dix/dispatch.c
> @@ -3414,7 +3414,6 @@ CloseDownClient(ClientPtr client)
>          if (grabState != GrabNone && grabClient == client) {
>              UngrabServer(client);
>          }
> -        mark_client_not_ready(client);
>          BITCLEAR(grabWaiters, client->index);
>          DeleteClientFromAnySelections(client);
>          ReleaseActiveGrabs(client);
> @@ -3443,8 +3442,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
> --
> 2.11.0
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel


This seems to fix the crashing for me.

Tested-by is inline.

Thanks,
Sarnex


More information about the xorg-devel mailing list