+ } else {
+ if (cell == cache->tail)
+ return cell->gc;
+ next = cell->next;
+ prev = cell->prev;
+ if (prev)
+ prev->next = next;
+ if (next)
+ next->prev = prev;
+ if (cache->head == cell)
+ cache->head = next;
+ cell->next = NULL;
+ cell->prev = cache->tail;
+ if (cache->tail)
+ cache->tail->next = cell;
+ else
+ abort();
+ cache->tail = cell;
+ if (cache->head == cell)
+ abort();
+ else if (cell->next)
+ abort();
+ else if (cache->head != NULL && cache->head->prev)
+ abort();
+ else if (cache->tail != NULL && cache->tail->next)
+ abort();
+ return cell->gc;
+ }