+ if (cache_queue_tail == NULL)
+ cache_queue_tail = cache_queue_head;
+ }
+ else if (cache_queue_head == ci)
+ {
+ /* do nothing */
+ }
+ else /* enqueued, but not first entry */
+ {
+ cache_item_t *prev;
+
+ /* find previous entry */
+ for (prev = cache_queue_head; prev != NULL; prev = prev->next)
+ if (prev->next == ci)
+ break;
+ assert (prev != NULL);
+
+ /* move to the front */
+ prev->next = ci->next;
+ ci->next = cache_queue_head;
+ cache_queue_head = ci;
+
+ /* check if we need to adapt the tail */
+ if (cache_queue_tail == ci)
+ cache_queue_tail = prev;
+ }
+ }
+ else /* (side == TAIL) */
+ {
+ /* We don't move values back in the list.. */
+ if ((ci->flags & CI_FLAGS_IN_QUEUE) != 0)
+ return (0);
+
+ assert (ci->next == NULL);
+
+ if (cache_queue_tail == NULL)
+ cache_queue_head = ci;
+ else
+ cache_queue_tail->next = ci;
+ cache_queue_tail = ci;
+ }