The scenario –
Thread B tries to delete an event E for which a callback is executed by thread
A. The callback calls event_base_gettimeofday_cached() that acquires
th_base_lock:
Thread A (LWP 14625 in the stack/strace below) locks *current_event_lock*
before invokoing callback.
Thread B (LWP 14585 in the stack/strace below) locks *th_base_lock* inside
method event_del.
Thread B *blocks* on *current_event_lock* inside event_del_internal.
Thread A *blocks* on *th_base_lock* inside event_base_gettimeofday_cached.
(gdb) thread 6
[Switching to thread 6 (Thread 1346476352 (LWP 14625))]#0 0x000000364460c758
in __lll_mutex_lock_wait () from /lib64/libpthread.so.0
(gdb) where
#0 0x000000364460c758 in __lll_mutex_lock_wait () from /lib64/libpthread.so.0
#1 0x00000036446087fa in _L_mutex_lock_908 () from /lib64/libpthread.so.0
#2 0x0000003644608682 in pthread_mutex_lock () from /lib64/libpthread.so.0
#3 0x00002aaab035e989 in event_base_gettimeofday_cached () from
/opt/breach/bwd/lib/libevent_core.so.4
#4 0x00002aaaae955017 in CBTcpProxyReceiverThread::SetPxcnTimeStamp
(this=0x23fcbb10, side=SIDE_CLIENT, p_pxcn=0x30e0db90)
at receiver_thread.cpp:174
#5 0x00002aaaae955084 in receiver_cb (fd=105, what=34, arg=0x30e0db90) at
receiver_thread.cpp:189
#6 0x00002aaab03613c9 in event_base_loop () from
/opt/breach/bwd/lib/libevent_core.so.4
#7 0x00002aaaae955638 in CBTcpProxyReceiverThread::run (this=0x23fcbb10) at
receiver_thread.cpp:42
#8 0x00002aaaae2f86c2 in JTCThread::entrance_hook (this=0x23fcbb10) at
Thread.cpp:1049
#9 0x00002aaaae2faf2f in lsf_thread_adapter (arg=0x23fcbb10) at Thread.cpp:174
#10 0x00000036446061b5 in start_thread () from /lib64/libpthread.so.0
#11 0x0000003643acd36d in clone () from /lib64/libc.so.6
#12 0x0000000000000000 in ?? ()
[r...@set8-64bit bwd]# strace -p 14625
Process 14625 attached - interrupt to quit futex(0x23fcc1b0, FUTEX_WAIT, 2,
NULL <unfinished ...>
(gdb) thread 18
[Switching to thread 18 (Thread 1220598080 (LWP 14585))]#0 0x000000364460c758
in __lll_mutex_lock_wait () from /lib64/libpthread.so.0
(gdb) where
#0 0x000000364460c758 in __lll_mutex_lock_wait () from /lib64/libpthread.so.0
#1 0x00000036446087fa in _L_mutex_lock_908 () from /lib64/libpthread.so.0
#2 0x0000003644608682 in pthread_mutex_lock () from /lib64/libpthread.so.0
#3 0x00002aaab0362123 in event_del () from
/opt/breach/bwd/lib/libevent_core.so.4
#4 0x00002aaaae9577a0 in CBTcpProxy::ShutDownRe (this=0x1cf2eb58,
px...@0x30e0db90, side=SIDE_CLIENT) at tcpproxy.cpp:450
#5 0x00002aaaae958834 in CBTcpProxy::ClosePXCN (this=0x1cf2eb58,
px...@0x30e0db90, closing_peer=SIDE_CLIENT) at tcpproxy.cpp:378
#6 0x00002aaaaac12546 in CGSnfHandler::ResetSession (this=0x2aaab898abd0) at
g_snf_handler.cpp:633
#7 0x00002aaaaac0feef in CGSnfHandler::HandleSession (this=0x2aaab898abd0) at
g_snf_handler.cpp:1203
#8 0x00002aaaaac10c6d in CGSnfHandler::OnRun (this=0x2aaab898abd0) at
g_snf_handler.cpp:840
#9 0x00002aaaaac6d2f3 in CProtocolHandlerTh::run (this=0x2aaab88f4930) at
protocolhandler.cpp:281 #10 0x00002aaaae2f86c2 in JTCThread::entrance_hook
(this=0x2aaab88f4930) at Thread.cpp:1049
#11 0x00002aaaae2faf2f in lsf_thread_adapter (arg=0x2aaab88f4930) at
Thread.cpp:174
#12 0x00000036446061b5 in start_thread () from /lib64/libpthread.so.0
#13 0x0000003643acd36d in clone () from /lib64/libc.so.6
#14 0x0000000000000000 in ?? ()
[r...@set8-64bit]# strace -p 14585
Process 14585 attached - interrupt to quit futex(0x23fcc1e0, FUTEX_WAIT, 2,
NULL <unfinished ...>
Avi
***********************************************************************
To unsubscribe, send an e-mail to [email protected] with
unsubscribe libevent-users in the body.