[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