003 File Manager
Current Path:
/usr/src/contrib/ntp/lib/isc/include/isc
usr
/
src
/
contrib
/
ntp
/
lib
/
isc
/
include
/
isc
/
📁
..
📄
app.h
(10.29 KB)
📄
assertions.h
(3.24 KB)
📄
backtrace.h
(4.21 KB)
📄
base32.h
(3.81 KB)
📄
base64.h
(2.9 KB)
📄
bind9.h
(1.16 KB)
📄
bitstring.h
(4.37 KB)
📄
boolean.h
(1.18 KB)
📄
buffer.h
(22.4 KB)
📄
bufferlist.h
(1.93 KB)
📄
commandline.h
(1.78 KB)
📄
entropy.h
(9.22 KB)
📄
error.h
(1.83 KB)
📄
event.h
(3.28 KB)
📄
eventclass.h
(1.87 KB)
📄
file.h
(9 KB)
📄
formatcheck.h
(1.39 KB)
📄
fsaccess.h
(7.77 KB)
📄
hash.h
(5.83 KB)
📄
heap.h
(5.62 KB)
📄
hex.h
(2.84 KB)
📄
hmacmd5.h
(1.92 KB)
📄
hmacsha.h
(4.41 KB)
📄
httpd.h
(1.98 KB)
📄
interfaceiter.h
(3.81 KB)
📄
ipv6.h
(3.6 KB)
📄
iterated_hash.h
(1.48 KB)
📄
lang.h
(1.13 KB)
📄
lex.h
(9.43 KB)
📄
lfsr.h
(3.4 KB)
📄
lib.h
(1.56 KB)
📄
list.h
(6.06 KB)
📄
log.h
(28.29 KB)
📄
magic.h
(1.44 KB)
📄
md5.h
(2.47 KB)
📄
mem.h
(21.21 KB)
📄
msgcat.h
(3.18 KB)
📄
msgs.h
(8.73 KB)
📄
mutexblock.h
(1.86 KB)
📄
namespace.h
(7.12 KB)
📄
netaddr.h
(4.8 KB)
📄
netscope.h
(1.44 KB)
📄
ondestroy.h
(3.25 KB)
📄
os.h
(1.16 KB)
📄
parseint.h
(2.01 KB)
📄
platform.h
(1.26 KB)
📄
platform.h.in
(8.02 KB)
📄
portset.h
(3.67 KB)
📄
print.h
(2.39 KB)
📄
queue.h
(2.95 KB)
📄
quota.h
(2.63 KB)
📄
radix.h
(6.89 KB)
📄
random.h
(1.78 KB)
📄
ratelimiter.h
(3.48 KB)
📄
refcount.h
(6.06 KB)
📄
region.h
(2.44 KB)
📄
resource.h
(3.32 KB)
📄
result.h
(4.67 KB)
📄
resultclass.h
(2.03 KB)
📄
rwlock.h
(3.75 KB)
📄
serial.h
(1.91 KB)
📄
sha1.h
(1.76 KB)
📄
sha2.h
(5.7 KB)
📄
sockaddr.h
(6.42 KB)
📄
socket.h
(32.28 KB)
📄
stats.h
(3.03 KB)
📄
stdio.h
(2.14 KB)
📄
stdlib.h
(1.19 KB)
📄
string.h
(6.79 KB)
📄
symtab.h
(4.59 KB)
📄
task.h
(20.45 KB)
📄
taskpool.h
(4.09 KB)
📄
timer.h
(11.02 KB)
📄
types.h
(5.69 KB)
📄
util.h
(7.67 KB)
📄
version.h
(1.18 KB)
📄
xml.h
(1.52 KB)
Editing: queue.h
/* * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC") * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /* $Id$ */ /* * 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. */ #ifndef ISC_QUEUE_H #define ISC_QUEUE_H 1 #include <isc/assertions.h> #include <isc/boolean.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 { void *next; isc_boolean_t linked; } #define ISC_QLINK_INIT(elt, link) \ do { \ (elt)->link.next = (void *)(-1); \ (elt)->link.linked = ISC_FALSE; \ } while (0) #define ISC_QLINK_LINKED(elt, link) ((elt)->link.linked) #define ISC_QUEUE(type) struct { \ type headnode; \ type *head, *tail; \ isc_mutex_t headlock, taillock; \ } #define ISC_QUEUE_INIT(queue, link) \ do { \ isc_mutex_init(&(queue).headlock); \ isc_mutex_init(&(queue).taillock); \ (queue).head = (void *) &((queue).headnode); \ (queue).tail = (void *) &((queue).headnode); \ ISC_QLINK_INIT((queue).head, link); \ } while (0) #define ISC_QUEUE_EMPTY(queue) ISC_TF((queue).head == (queue).tail) #define ISC_QUEUE_DESTROY(queue) \ do { \ ISC_QLINK_INSIST(ISC_QUEUE_EMPTY(queue)); \ isc_mutex_destroy(&(queue).headlock); \ isc_mutex_destroy(&(queue).taillock); \ } while (0) #define ISC_QUEUE_PUSH(queue, elt, link) \ do { \ ISC_QLINK_INSIST(!ISC_QLINK_LINKED(elt, link)); \ (elt)->link.next = (void *)(-1); \ LOCK(&(queue).taillock); \ (queue).tail->link.next = elt; \ (queue).tail = elt; \ UNLOCK(&(queue).taillock); \ (elt)->link.linked = ISC_TRUE; \ } while (0) #define ISC_QUEUE_POP(queue, link, ret) \ do { \ LOCK(&(queue).headlock); \ ret = (queue).head->link.next; \ if (ret == (void *)(-1)) { \ UNLOCK(&(queue).headlock); \ ret = NULL; \ } else { \ (queue).head->link.next = ret->link.next; \ if (ret->link.next == (void *)(-1)) { \ LOCK(&(queue).taillock); \ (queue).tail = (queue).head; \ UNLOCK(&(queue).taillock); \ } \ UNLOCK(&(queue).headlock); \ ret->link.next = (void *)(-1); \ ret->link.linked = ISC_FALSE; \ } \ } while (0) #endif /* ISC_QUEUE_H */
Upload File
Create Folder