]> git.sur5r.net Git - openldap/commitdiff
ITS#395: fix 2 writer in reader/writer lock bug
authorKurt Zeilenga <kurt@openldap.org>
Thu, 9 Dec 1999 00:00:53 +0000 (00:00 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 9 Dec 1999 00:00:53 +0000 (00:00 +0000)
CHANGES
libraries/liblthread/rdwr.c

diff --git a/CHANGES b/CHANGES
index 0994a7c33aa7d6db8335f8f41f1ed3635b48b515..aeaf31b093ed9a18f6944fcf65b4e7ac507c62bc 100644 (file)
--- 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
index b4dabbc134fc82f03b1a73506854b0918b797490..afb9ccc2ec9d6548375b361a69fc0e2bb1e8af16 100644 (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;
        }