Hi,
I found the following deadlock bug in libevent code (2.0.21). It looks that the problem is inÂ
bufferevent_disable that locks bufev and transitively calls event_del_internal which waits for read callback to finish when it's not in the main thread. Meanwhile the main thread calls bufferevent_readcb which deadlocks on bufev.
Is it a known issue? Are there workarounds for this?
libevent thread:
#1 Â0x00007ffff794e672 in _L_lock_953 () from /lib/x86_64-linux-gnu/libpthread.so.0
#2 Â0x00007ffff794e4da in __GI___pthread_mutex_lock (mutex=0x1031c80) at ../nptl/pthread_mutex_lock.c:114
#3 Â0x00007ffff771723c in _bufferevent_incref_and_lock (bufev=bufev@entry=0x1188c00) at bufferevent.c:582
#4 Â0x00007ffff771842a in bufferevent_readcb (fd=11, event=<optimized out>, arg=0x1188c00) at bufferevent_sock.c:133
#5 Â0x00007ffff770df24 in event_process_active_single_queue (activeq=0x1024640, base=0x1090000) at event.c:1350
user thread:
#0 Âpthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1 Â0x00007ffff74fdfe5 in evthread_posix_cond_wait (_cond=0x1032430, _lock=0x1032460, tv=0x0) at evthread_pthread.c:156
#2 Â0x00007ffff770b9ed in event_del_internal (ev=<optimized out>) at event.c:2220
#3 Âevent_del (ev=ev@entry=0x1188c10) at event.c:2188
#4 Â0x00007ffff7718645 in be_socket_disable (bufev=0x1188c00, event=<optimized out>) at bufferevent_sock.c:570
#5 Â0x00007ffff771702b in bufferevent_disable (bufev=0x1188c00, event=<optimized out>) at bufferevent.c:505