PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB` REDROOM
PHP 5.6.40
Preview: queue.h Size: 5.08 KB
//usr/include/bind9/isc/queue.h

/*
 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
 *
 * See the COPYRIGHT file distributed with this work for additional
 * information regarding copyright ownership.
 */


/*
 * This is a generic implementation of a two-lock concurrent queue.
 * There are built-in mutex locks for the head and tail of the queue,
 * allowing elements to be safely added and removed at the same time.
 *
 * NULL is "end of list"
 * -1 is "not linked"
 */

#ifndef ISC_QUEUE_H
#define ISC_QUEUE_H 1

#include <stdbool.h>

#include <isc/assertions.h>
#include <isc/mutex.h>

#ifdef ISC_QUEUE_CHECKINIT
#define ISC_QLINK_INSIST(x) ISC_INSIST(x)
#else
#define ISC_QLINK_INSIST(x) (void)0
#endif

#define ISC_QLINK(type) struct { type *prev, *next; }

#define ISC_QLINK_INIT(elt, link) \
	do { \
		(elt)->link.next = (elt)->link.prev = (void *)(-1); \
	} while(0)

#define ISC_QLINK_LINKED(elt, link) ((void*)(elt)->link.next != (void*)(-1))

#define ISC_QUEUE(type) struct { \
	type *head, *tail; \
	isc_mutex_t headlock, taillock; \
}

#define ISC_QUEUE_INIT(queue, link) \
	do { \
		(void) isc_mutex_init(&(queue).taillock); \
		(void) isc_mutex_init(&(queue).headlock); \
		(queue).tail = (queue).head = NULL; \
	} while (0)

#define ISC_QUEUE_EMPTY(queue) ((queue).head == NULL)

#define ISC_QUEUE_DESTROY(queue) \
	do { \
		ISC_QLINK_INSIST(ISC_QUEUE_EMPTY(queue)); \
		(void) isc_mutex_destroy(&(queue).taillock); \
		(void) isc_mutex_destroy(&(queue).headlock); \
	} while (0)

/*
 * queues are meant to separate the locks at either end.  For best effect, that
 * means keeping the ends separate - i.e. non-empty queues work best.
 *
 * a push to an empty queue has to take the pop lock to update
 * the pop side of the queue.
 * Popping the last entry has to take the push lock to update
 * the push side of the queue.
 *
 * The order is (pop, push), because a pop is presumably in the
 * latency path and a push is when we're done.
 *
 * We do an MT hot test in push to see if we need both locks, so we can
 * acquire them in order.  Hopefully that makes the case where we get
 * the push lock and find we need the pop lock (and have to release it) rare.
 *
 * > 1 entry - no collision, push works on one end, pop on the other
 *   0 entry - headlock race
 *     pop wins - return(NULL), push adds new as both head/tail
 *     push wins - updates head/tail, becomes 1 entry case.
 *   1 entry - taillock race
 *     pop wins - return(pop) sets head/tail NULL, becomes 0 entry case
 *     push wins - updates {head,tail}->link.next, pop updates head
 *                 with new ->link.next and doesn't update tail
 *
 */
#define ISC_QUEUE_PUSH(queue, elt, link) \
	do { \
		bool headlocked = false; \
		ISC_QLINK_INSIST(!ISC_QLINK_LINKED(elt, link)); \
		LOCK(&(queue).taillock); \
		if ((queue).tail == NULL) { \
			UNLOCK(&(queue).taillock); \
			LOCK(&(queue).headlock); \
			LOCK(&(queue).taillock); \
			headlocked = true; \
		} \
		(elt)->link.prev = (queue).tail; \
		(elt)->link.next = NULL; \
		if ((queue).tail != NULL) \
			(queue).tail->link.next = (elt); \
		(queue).tail = (elt); \
		UNLOCK(&(queue).taillock); \
		if (headlocked) { \
			if ((queue).head == NULL) \
				(queue).head = (elt); \
			UNLOCK(&(queue).headlock); \
		} \
	} while (0)

#define ISC_QUEUE_POP(queue, link, ret) \
	do { \
		LOCK(&(queue).headlock); \
		ret = (queue).head; \
		while (ret != NULL) { \
			if (ret->link.next == NULL) { \
				LOCK(&(queue).taillock); \
				if (ret->link.next == NULL) { \
					(queue).head = (queue).tail = NULL; \
					UNLOCK(&(queue).taillock); \
					break; \
				}\
				UNLOCK(&(queue).taillock); \
			} \
			(queue).head = ret->link.next; \
			(queue).head->link.prev = NULL; \
			break; \
		} \
		UNLOCK(&(queue).headlock); \
		if (ret != NULL) \
			(ret)->link.next = (ret)->link.prev = (void *)(-1); \
	} while(0)

#define ISC_QUEUE_UNLINK(queue, elt, link) \
	do { \
		ISC_QLINK_INSIST(ISC_QLINK_LINKED(elt, link)); \
		LOCK(&(queue).headlock); \
		LOCK(&(queue).taillock); \
		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)

#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 */

Directory Contents

Dirs: 0 × Files: 108

Name Size Perms Modified Actions
1.05 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
10.23 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.84 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
4.07 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.80 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
4.35 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.80 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
830 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
594 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
25.65 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.42 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.35 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.67 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.44 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.88 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
998 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
623 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.56 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
4.67 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
10.13 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
659 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
902 B lrw-r--r-- 2025-11-06 07:45:48
Edit Download
1.40 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.98 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.35 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
11.39 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
893 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
7.27 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
7.48 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
5.14 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.74 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.75 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
4.41 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
4.29 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.26 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.06 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.05 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.02 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.42 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
989 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
637 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
9.54 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.89 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.04 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
818 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
5.62 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
28.06 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
994 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.32 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
20.62 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
710 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.66 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
8.22 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.44 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.34 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
10.29 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
4.48 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
863 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
967 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
700 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
983 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.73 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
671 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.51 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
9.49 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.42 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.22 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.42 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
5.08 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.38 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
6.34 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.50 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.42 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
8.00 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
767 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.99 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
2.79 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
4.87 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.56 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.72 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.32 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.34 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.52 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
5.60 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
734 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
5.90 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
35.80 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
806 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.62 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
5.13 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.75 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
704 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.04 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
777 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
5.88 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
4.22 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
844 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
21.04 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
3.62 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.47 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
8.67 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
10.54 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
895 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
5.64 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
928 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
10.29 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download
689 B lrw-r--r-- 2025-11-06 07:45:35
Edit Download
1.07 KB lrw-r--r-- 2025-11-06 07:45:35
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).
© 2026 REDROOM — Secure File Manager. All rights reserved. Built with ❤️ & Red Dark UI