From: Kurt Zeilenga Date: Thu, 9 Dec 1999 00:00:53 +0000 (+0000) Subject: ITS#395: fix 2 writer in reader/writer lock bug X-Git-Tag: OPENLDAP_REL_ENG_1_2_8~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56382b2e0523faef424a36bf25708f32d447630e;p=thirdparty%2Fopenldap.git ITS#395: fix 2 writer in reader/writer lock bug --- diff --git a/CHANGES b/CHANGES index 0994a7c33a..aeaf31b093 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,7 @@ Changes included in OpenLDAP 1.2 Release Engineering Fixed lber/io.c Cray T90 specific pointer arithmetic problem (ITS#325) Fixed s_addr dereferencing (ITS#340) Fixed ud strstr crash (ITS#328) + Fixed -lthread rdwr 2-writer bug (ITS#395) Added TCP_NODELAY support Changed slapd to apply ACL to lastmod attributes Changed slapd.conf default referral diff --git a/libraries/liblthread/rdwr.c b/libraries/liblthread/rdwr.c index b4dabbc134..afb9ccc2ec 100644 --- a/libraries/liblthread/rdwr.c +++ b/libraries/liblthread/rdwr.c @@ -45,7 +45,7 @@ ldap_pvt_thread_rdwr_destroy( ldap_pvt_thread_rdwr_t *rw ) ldap_pvt_thread_mutex_lock( &rw->ltrw_mutex ); /* active threads? */ - if( rw->ltrw_r_active > 0 || rw->ltrw_w_active > 1) { + if( rw->ltrw_r_active > 0 || rw->ltrw_w_active > 0) { ldap_pvt_thread_mutex_unlock( &rw->ltrw_mutex ); return LDAP_PVT_THREAD_EBUSY; } @@ -72,7 +72,7 @@ int ldap_pvt_thread_rdwr_rlock( ldap_pvt_thread_rdwr_t *rw ) ldap_pvt_thread_mutex_lock( &rw->ltrw_mutex ); - if( rw->ltrw_w_active > 1 ) { + if( rw->ltrw_w_active > 0 ) { /* writer is active */ rw->ltrw_r_wait++; @@ -80,7 +80,7 @@ int ldap_pvt_thread_rdwr_rlock( ldap_pvt_thread_rdwr_t *rw ) do { ldap_pvt_thread_cond_wait( &rw->ltrw_read, &rw->ltrw_mutex ); - } while( rw->ltrw_w_active > 1 ); + } while( rw->ltrw_w_active > 0 ); rw->ltrw_r_wait--; } @@ -99,7 +99,7 @@ int ldap_pvt_thread_rdwr_rtrylock( ldap_pvt_thread_rdwr_t *rw ) ldap_pvt_thread_mutex_lock( &rw->ltrw_mutex ); - if( rw->ltrw_w_active > 1) { + if( rw->ltrw_w_active > 0) { ldap_pvt_thread_mutex_unlock( &rw->ltrw_mutex ); return LDAP_PVT_THREAD_EBUSY; }