[Xcb] [PATCH 2/3] fix deadlock with xcb_take_socket/return_socket v3
Uli Schlachter
psychon at znc.in
Sat Jun 1 13:33:01 PDT 2013
On 15.05.2013 11:21, Christian König wrote:
> From: Christian König <christian.koenig at amd.com>
>
> To prevent different threads from stealing the socket from each other the
> caller of "xcb_take_socket" must hold a lock that is also acquired in
> "return_socket". Unfortunately xcb tries to prevent calling return_socket
> from multiple threads and this can lead to a deadlock situation.
>
> A simple example:
> - X11 has taken the socket
> - Thread A has locked the display.
> - Thread B does xcb_no_operation() and thus ends up in libX11's return_socket(),
> waiting for the display lock.
> - Thread A calls e.g. xcb_no_operation(), too, ends up in return_socket() and
> because socket_moving == 1, ends up waiting for thread B
> => Deadlock
>
> This patch allows calling return_socket from different threads at the same time
> an so resolves the deadlock situation.
>
> Partially fixes: https://bugs.freedesktop.org/show_bug.cgi?id=20708
>
> v2: fixes additional pthread_cond_wait dependencies,
> rework comments and patch description
>
> v3: separate pthread_cond_wait dependencies and unrelated whitespace
> change into their own patch, use unsigned for socket_seq
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
Since no one spoke up and complained (or said anything at all...):
Thanks, I just pushed this patch. Let's see if this motivates anyone to complain
now or if this patch ends up in the next release.
Cheers,
Uli
P.S.: Let's see how long it will take patch 3/3 to get in. It certainly does
improve the current state, but my head starts spinning when I wonder if it fixes
the whole issue.
--
Sent from my Game Boy.
More information about the Xcb
mailing list