ITS#6341 removal of last entry from cache caused corruption in the lru list

This commit is contained in:
Ralf Haferkamp 2009-10-20 14:41:09 +00:00
parent 68b914d72b
commit 96ce821037

View file

@ -106,10 +106,14 @@ bdb_cache_entryinfo_free( Cache *cache, EntryInfo *ei )
}
#define LRU_DEL( c, e ) do { \
if ( e == (c)->c_lruhead ) (c)->c_lruhead = e->bei_lruprev; \
if ( e == (c)->c_lrutail ) (c)->c_lrutail = e->bei_lruprev; \
e->bei_lrunext->bei_lruprev = e->bei_lruprev; \
e->bei_lruprev->bei_lrunext = e->bei_lrunext; \
if ( e == e->bei_lruprev ) { \
(c)->c_lruhead = (c)->c_lrutail = NULL; \
} else { \
if ( e == (c)->c_lruhead ) (c)->c_lruhead = e->bei_lruprev; \
if ( e == (c)->c_lrutail ) (c)->c_lrutail = e->bei_lruprev; \
e->bei_lrunext->bei_lruprev = e->bei_lruprev; \
e->bei_lruprev->bei_lrunext = e->bei_lrunext; \
} \
e->bei_lruprev = NULL; \
} while ( 0 )