test.007@seznam.cz wrote:
Full_Name: Test Seven Version: 2.4.22 OS: Windows URL: ftp://ftp.openldap.org/incoming/ Submission from: (NULL) (195.113.184.10)
lconn_refcnt is read and written without any sync mechanism, which may cause subtle multi-threading issues.
You're mistaken. ld->ld_res_mutex is owned in all cases where lc->lconn_refcnt is touched.
E.g. libldap/result.c -r1.172 #ifdef LDAP_R_COMPILE ldap_pvt_thread_mutex_unlock(&ld->ld_conn_mutex ); #endif rc = try_read1msg( ld, msgid, all, lc, result ); lnext = lc->lconn_next; /* Only take locks if we're really freeing */ if ( lc->lconn_refcnt<= 1 ) { #ifdef LDAP_R_COMPILE ldap_pvt_thread_mutex_lock(&ld->ld_req_mutex ); #endif ldap_free_connection( ld, lc, 0, 1 );