client->shutdown_arg = NULL;
}
- if (ISC_QLINK_LINKED(client, ilink))
- ISC_QUEUE_UNLINK(client->manager->inactive, client, ilink);
+ ISC_QUEUE_UNLINKIFLINKED(client->manager->inactive, client, ilink);
client->newstate = NS_CLIENTSTATE_FREED;
client->needshutdown = false;
(elt)->link.next = (elt)->link.prev = (void *)(-1); \
} while(0)
+#define ISC_QUEUE_UNLINKIFLINKED(queue, elt, link) \
+ do { \
+ LOCK(&(queue).headlock); \
+ LOCK(&(queue).taillock); \
+ if (ISC_QLINK_LINKED(elt, link)) { \
+ if ((elt)->link.prev == NULL) \
+ (queue).head = (elt)->link.next; \
+ else \
+ (elt)->link.prev->link.next = (elt)->link.next; \
+ if ((elt)->link.next == NULL) \
+ (queue).tail = (elt)->link.prev; \
+ else \
+ (elt)->link.next->link.prev = (elt)->link.prev; \
+ } \
+ UNLOCK(&(queue).taillock); \
+ UNLOCK(&(queue).headlock); \
+ (elt)->link.next = (elt)->link.prev = (void *)(-1); \
+ } while(0)
+
#endif /* ISC_QUEUE_H */