[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [Libevent-users] bufferevent openssl deadlock



On Fri, Feb 24, 2012 at 07:14:58PM -0600, Amarin Phaosawasdi wrote:
> Hello,
> 
> About a year ago, there was a thread about deadlocking in
> bufferevent_openssl in multi-threaded mode (
> http://archives.seul.org/libevent/users/Jan-2011/msg00019.html).
> 
> We've run into the same problem.
> 

Here are some more details for everyone:

Thread 2 (Thread 0x7ffff65d9700 (LWP 13521)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162
#1  0x00007ffff73a5020 in evthread_posix_cond_wait (_cond=0x674520, _lock=0x6744f0, tv=0x0) at evthread_pthread.c:156
#2  0x00007ffff7b9a844 in event_del_internal (ev=0x68cf18) at event.c:2184
#3  0x00007ffff7b9a6bc in event_del (ev=0x68cf18) at event.c:2152
#4  0x00007ffff71a056a in consider_writing (bev_ssl=0x68ce80) at bufferevent_openssl.c:830
#5  0x00007ffff71a0e28 in be_openssl_outbuf_cb (buf=0x68d160, cbinfo=0x7ffff65d8d40, arg=0x68ce80) at bufferevent_openssl.c:1066
#6  0x00007ffff7b9df98 in evbuffer_run_callbacks (buffer=0x68d160, running_deferred=0) at buffer.c:486

Thread 1 (Thread 0x7ffff7fdf700 (LWP 13519)):
#0  evthread_posix_lock (mode=0, _lock=0x68d230) at evthread_pthread.c:70
#1  0x00007ffff7ba59fa in _bufferevent_incref_and_lock (bufev=0x68ce80) at bufferevent.c:582
#2  0x00007ffff71a0717 in be_openssl_writeeventcb (fd=10, what=4, ptr=0x68ce80) at bufferevent_ope

(gdb) print * lock
$4 = {
  __data = {
    __lock = 1,
    __count = 1,
    __owner = 13521,


As you can see, the owner of the lock is pid 13521 (thread 2) using a cond_wait, but thread 1 is attempting to acquire the lock
resulting in a deadlock.


Nick mentioned to me, the real issue is the use of conditions to handle event_del(). So looking into that may be 
a better start.

I have been on-and-off attempting to patch this, but with the openssl api is quite dreadful right now, it's a slow game. 

***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.