ITS#395: fix 2 writer in reader/writer lock bug

This commit is contained in:
Kurt Zeilenga 1999-12-09 00:00:53 +00:00
parent 0527947025
commit 56382b2e05
2 changed files with 5 additions and 4 deletions

View file

@ -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

View file

@ -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;
}