ITS#5332 someone else may free the entry as soon as we unlock it

This commit is contained in:
Howard Chu 2008-02-08 06:32:41 +00:00
parent f481ffef9c
commit a3262ff239

View 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 );