| 223 | } |
| 224 | |
| 225 | void LRUCache::Unref(LRUHandle* e) { |
| 226 | assert(e->refs > 0); |
| 227 | e->refs--; |
| 228 | if (e->refs == 0) { // Deallocate. |
| 229 | assert(!e->in_cache); |
| 230 | (*e->deleter)(e->key(), e->value); |
| 231 | free(e); |
| 232 | } else if (e->in_cache && e->refs == 1) { |
| 233 | // No longer in use; move to lru_ list. |
| 234 | LRU_Remove(e); |
| 235 | LRU_Append(&lru_, e); |
| 236 | } |
| 237 | } |
| 238 | |
| 239 | void LRUCache::LRU_Remove(LRUHandle* e) { |
| 240 | e->next->prev = e->prev; |