-#define QUEUE ((bres_client *)&queue)
-static struct { bres_client *next, *prev; } queue = { QUEUE, QUEUE };
+#define UNLINK(head, tail, p) do { \
+ *((p)->next ? &(p)->next->prev : &(tail)) = (p)->prev; \
+ *((p)->prev ? &(p)->prev->next : &(head)) = (p)->next; \
+} while (0)