[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
(ITS#4001) test039 back-ldap mutex unlocked by wrong thread
Full_Name: Hallvard B Furuseth
Version: HEAD
OS: Linux
URL:
Submission from: (NULL) (129.240.186.42)
Submitted by: hallvard
back-ldap/unbind.c:ldap_back_conn_destroy() contains the code snippet:
ldap_pvt_thread_mutex_trylock( &li->conn_mutex );
lc = avl_delete( &li->conntree, (caddr_t)&lc_curr, ldap_back_conn_cmp );
ldap_pvt_thread_mutex_unlock( &li->conn_mutex );
If the trylock fails, the mutex is unlocked even though another thread
locked it.
The bug comes from this change:
revision 1.28
date: 2005/08/06 22:35:11; author: ando; state: Exp; lines: +2 -12
use trylock only where necessary
and was triggered in test039-glue-ldap-concurrency with this backtrace:
...
#4 0x0818c666 in ldap_pvt_thread_mutex_unlock (mutex=0x1bdc045c)
at thr_debug.c:758
#5 0x0810c50f in ldap_back_conn_destroy (be=0x1e6d6f80, conn=0x1bf3b4e8)
at unbind.c:53
#6 0x080e36af in over_connection_func (bd=0x1e6d6f80, conn=0x1bf3b4e8,
which=conn_destroy) at backover.c:675
#7 0x080e3709 in over_connection_destroy (bd=0x1bdc0298, conn=0x1bf3b4e8)
at backover.c:700
#8 0x08089f4b in backend_connection_destroy (conn=0x1bf3b4e8) at backend.c:772
#9 0x0807a8d0 in connection_destroy (c=0x1bf3b4e8) at connection.c:645
#10 0x0807b200 in connection_close (c=0x1bf3b4e8) at connection.c:812
#11 0x0807cea5 in connection_resched (conn=0x1bf3b4e8) at connection.c:1595
#12 0x0807bc09 in connection_operation (ctx=0x1e6d72a4, arg_v=0x1d7fdff0)
at connection.c:1113
#13 0x08189eb4 in ldap_int_thread_pool_wrapper (xpool=0x1bbce3a8)
at tpool.c:485
#14 0x00bf9341 in start_thread () from /lib/tls/libpthread.so.0
#15 0x00a79fee in clone () from /lib/tls/libc.so.6
(thr_debug is my private wrapper package which looks for some thread errors.)