-#define IDL_LRU_DELETE( bdb, e ) do { \
- if ( e == bdb->bi_idl_lru_head ) bdb->bi_idl_lru_head = e->idl_lru_next; \
- if ( e == bdb->bi_idl_lru_tail ) bdb->bi_idl_lru_tail = e->idl_lru_prev; \
- e->idl_lru_next->idl_lru_prev = e->idl_lru_prev; \
- e->idl_lru_prev->idl_lru_next = e->idl_lru_next; \
+#define IDL_LRU_DELETE( bdb, e ) do { \
+ if ( (e) == (bdb)->bi_idl_lru_head ) { \
+ if ( (e)->idl_lru_next == (bdb)->bi_idl_lru_head ) { \
+ (bdb)->bi_idl_lru_head = NULL; \
+ } else { \
+ (bdb)->bi_idl_lru_head = (e)->idl_lru_next; \
+ } \
+ } \
+ if ( (e) == (bdb)->bi_idl_lru_tail ) { \
+ if ( (e)->idl_lru_prev == (bdb)->bi_idl_lru_tail ) { \
+ assert( (bdb)->bi_idl_lru_head == NULL ); \
+ (bdb)->bi_idl_lru_tail = NULL; \
+ } else { \
+ (bdb)->bi_idl_lru_tail = (e)->idl_lru_prev; \
+ } \
+ } \
+ (e)->idl_lru_next->idl_lru_prev = (e)->idl_lru_prev; \
+ (e)->idl_lru_prev->idl_lru_next = (e)->idl_lru_next; \