]> git.sur5r.net Git - openldap/commitdiff
ITS#5332 someone else may free the entry as soon as we unlock it
authorHoward Chu <hyc@openldap.org>
Fri, 8 Feb 2008 06:32:41 +0000 (06:32 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 8 Feb 2008 06:32:41 +0000 (06:32 +0000)
servers/slapd/back-bdb/cache.c

index 3156667d40a8947dc8855fd02557992abc67c330..9c0ad339501983fab16adf8c9a1c4e317b928ac4 100644 (file)
@@ -251,15 +251,17 @@ bdb_cache_return_entry_rw( struct bdb_info *bdb, Entry *e,
        EntryInfo *ei;
        int free = 0;
 
-       bdb_cache_entry_db_unlock( bdb, lock );
        ei = e->e_private;
-       bdb_cache_entryinfo_lock( ei );
-       if ( ei->bei_state & CACHE_ENTRY_NOT_CACHED ) {
-               ei->bei_e = NULL;
-               ei->bei_state ^= CACHE_ENTRY_NOT_CACHED;
-               free = 1;
+       bdb_cache_entry_db_unlock( bdb, lock );
+       if ( ei ) {
+               bdb_cache_entryinfo_lock( ei );
+               if ( ei->bei_state & CACHE_ENTRY_NOT_CACHED ) {
+                       ei->bei_e = NULL;
+                       ei->bei_state ^= CACHE_ENTRY_NOT_CACHED;
+                       free = 1;
+               }
+               bdb_cache_entryinfo_unlock( ei );
        }
-       bdb_cache_entryinfo_unlock( ei );
        if ( free ) {
                e->e_private = NULL;
                bdb_entry_return( e );