]> git.sur5r.net Git - openldap/commitdiff
cache_set_state( cache, e, 0) cannot occur before lock on parent/root
authorKurt Zeilenga <kurt@openldap.org>
Tue, 26 Jan 1999 05:22:58 +0000 (05:22 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Tue, 26 Jan 1999 05:22:58 +0000 (05:22 +0000)
is released.  Some other thread may have cache locked but blocking
on parent.  Must give up parent lock before acquiring cache lock.

servers/slapd/back-ldbm/add.c

index 8e8316c196b8d13c00729880574046ddbd1107e8..28fdc31e7b253c896435483f1666a53b012b5dcb 100644 (file)
@@ -221,8 +221,6 @@ ldbm_back_add(
        rc = 0;
 
 return_results:;
-       cache_set_state( &li->li_cache, e, 0 );
-
        if (p != NULL) {
                /* free parent and writer lock */
                cache_return_entry_w( &li->li_cache, p ); 
@@ -233,6 +231,8 @@ return_results:;
                pthread_mutex_unlock(&li->li_root_mutex);
        }
 
+       cache_set_state( &li->li_cache, e, 0 );
+
        /* free entry and writer lock */
        cache_return_entry_w( &li->li_cache, e );