]> git.sur5r.net Git - openldap/commitdiff
ITS#4254 fix lock ordering
authorHoward Chu <hyc@openldap.org>
Thu, 8 Dec 2005 23:45:47 +0000 (23:45 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 8 Dec 2005 23:45:47 +0000 (23:45 +0000)
servers/slapd/back-bdb/cache.c

index 8e39d952dffd3a597e9f0dbd6b248a5ef8f14090..92711b243b17b76845e15a077a714c9f91e7a7eb 100644 (file)
@@ -438,12 +438,6 @@ hdb_cache_find_parent(
                        addlru = 0;
 
                }
-               if ( addlru ) {
-                       ldap_pvt_thread_mutex_lock( &bdb->bi_cache.lru_mutex );
-                       LRU_ADD( &bdb->bi_cache, ein );
-                       ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.lru_mutex );
-               }
-               addlru = 1;
 
                /* If this is the first time, save this node
                 * to be returned later.
@@ -465,6 +459,13 @@ hdb_cache_find_parent(
                                bdb->bi_cache.c_leaves++;
                ldap_pvt_thread_rdwr_wunlock( &bdb->bi_cache.c_rwlock );
 
+               if ( addlru ) {
+                       ldap_pvt_thread_mutex_lock( &bdb->bi_cache.lru_mutex );
+                       LRU_ADD( &bdb->bi_cache, ein );
+                       ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.lru_mutex );
+               }
+               addlru = 1;
+
                /* Got the parent, link in and we're done. */
                if ( ei2 ) {
                        bdb_cache_entryinfo_lock( ei2 );