/* * 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 http://mozilla.org/MPL/2.0/. * * See the COPYRIGHT file distributed with this work for additional * information regarding copyright ownership. */ #ifndef ISC_OBJPOOL_H #define ISC_OBJPOOL_H 1 /***** ***** Module Info *****/ /*! \file isc/pool.h * \brief An object pool is a mechanism for sharing a small pool of * fungible objects among a large number of objects that depend on them. * * This is useful, for example, when it causes performance problems for * large number of zones to share a single memory context or task object, * but it would create a different set of problems for them each to have an * independent task or memory context. */ /*** *** Imports. ***/ #include <isc/lang.h> #include <isc/mem.h> #include <isc/types.h> ISC_LANG_BEGINDECLS /***** ***** Types. *****/ typedef void (*isc_pooldeallocator_t)(void **object); typedef isc_result_t (*isc_poolinitializer_t)(void **target, void *arg); typedef struct isc_pool isc_pool_t; /***** ***** Functions. *****/ isc_result_t isc_pool_create(isc_mem_t *mctx, unsigned int count, isc_pooldeallocator_t free, isc_poolinitializer_t init, void *initarg, isc_pool_t **poolp); /*%< * Create a pool of "count" object pointers. If 'free' is not NULL, * it points to a function that will detach the objects. 'init' * points to a function that will initialize the arguments, and * 'arg' to an argument to be passed into that function (for example, * a relevant manager or context object). * * Requires: * *\li 'mctx' is a valid memory context. * *\li init != NULL * *\li poolp != NULL && *poolp == NULL * * Ensures: * *\li On success, '*poolp' points to the new object pool. * * Returns: * *\li #ISC_R_SUCCESS *\li #ISC_R_NOMEMORY *\li #ISC_R_UNEXPECTED */ void * isc_pool_get(isc_pool_t *pool); /*%< * Returns a pointer to an object from the pool. Currently the object * is chosen from the pool at random. (This may be changed in the future * to something that guaratees balance.) */ int isc_pool_count(isc_pool_t *pool); /*%< * Returns the number of objcts in the pool 'pool'. */ isc_result_t isc_pool_expand(isc_pool_t **sourcep, unsigned int count, isc_pool_t **targetp); /*%< * If 'size' is larger than the number of objects in the pool pointed to by * 'sourcep', then a new pool of size 'count' is allocated, the existing * objects are copied into it, additional ones created to bring the * total number up to 'count', and the resulting pool is attached to * 'targetp'. * * If 'count' is less than or equal to the number of objects in 'source', then * 'sourcep' is attached to 'targetp' without any other action being taken. * * In either case, 'sourcep' is detached. * * Requires: * * \li 'sourcep' is not NULL and '*source' is not NULL * \li 'targetp' is not NULL and '*source' is NULL * * Ensures: * * \li On success, '*targetp' points to a valid task pool. * \li On success, '*sourcep' points to NULL. * * Returns: * * \li #ISC_R_SUCCESS * \li #ISC_R_NOMEMORY */ void isc_pool_destroy(isc_pool_t **poolp); /*%< * Destroy a task pool. The tasks in the pool are detached but not * shut down. * * Requires: * \li '*poolp' is a valid task pool. */ ISC_LANG_ENDDECLS #endif /* ISC_OBJPOOL_H */
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
aes.h | File | 1.05 KB | 0644 |
|
app.h | File | 10.23 KB | 0644 |
|
assertions.h | File | 2.78 KB | 0644 |
|
atomic.h | File | 4.15 KB | 0644 |
|
backtrace.h | File | 3.8 KB | 0644 |
|
base32.h | File | 3.94 KB | 0644 |
|
base64.h | File | 2.39 KB | 0644 |
|
bind9.h | File | 849 B | 0644 |
|
boolean.h | File | 746 B | 0644 |
|
buffer.h | File | 25.69 KB | 0644 |
|
bufferlist.h | File | 1.42 KB | 0644 |
|
commandline.h | File | 1.69 KB | 0644 |
|
condition.h | File | 1.44 KB | 0644 |
|
counter.h | File | 1.88 KB | 0644 |
|
crc64.h | File | 986 B | 0644 |
|
deprecated.h | File | 622 B | 0644 |
|
dir.h | File | 1.96 KB | 0644 |
|
entropy.h | File | 8.76 KB | 0644 |
|
errno.h | File | 658 B | 0644 |
|
errno2result.h | File | 893 B | 0644 |
|
error.h | File | 1.4 KB | 0644 |
|
event.h | File | 2.98 KB | 0644 |
|
eventclass.h | File | 1.35 KB | 0644 |
|
file.h | File | 11.43 KB | 0644 |
|
formatcheck.h | File | 892 B | 0644 |
|
fsaccess.h | File | 7.25 KB | 0644 |
|
hash.h | File | 7.52 KB | 0644 |
|
heap.h | File | 5.14 KB | 0644 |
|
hex.h | File | 2.33 KB | 0644 |
|
hmacmd5.h | File | 1.75 KB | 0644 |
|
hmacsha.h | File | 4.44 KB | 0644 |
|
ht.h | File | 4.29 KB | 0644 |
|
httpd.h | File | 2.26 KB | 0644 |
|
int.h | File | 1.37 KB | 0644 |
|
interfaceiter.h | File | 3.03 KB | 0644 |
|
iterated_hash.h | File | 1.02 KB | 0644 |
|
json.h | File | 1.42 KB | 0644 |
|
keyboard.h | File | 976 B | 0644 |
|
lang.h | File | 636 B | 0644 |
|
lex.h | File | 9.42 KB | 0644 |
|
lfsr.h | File | 2.88 KB | 0644 |
|
lib.h | File | 1.04 KB | 0644 |
|
likely.h | File | 718 B | 0644 |
|
list.h | File | 5.65 KB | 0644 |
|
log.h | File | 28.06 KB | 0644 |
|
magic.h | File | 993 B | 0644 |
|
md5.h | File | 2.34 KB | 0644 |
|
mem.h | File | 20.63 KB | 0644 |
|
meminfo.h | File | 690 B | 0644 |
|
msgcat.h | File | 2.66 KB | 0644 |
|
msgs.h | File | 8.22 KB | 0644 |
|
mutex.h | File | 3.44 KB | 0644 |
|
mutexblock.h | File | 1.34 KB | 0644 |
|
net.h | File | 10.32 KB | 0644 |
|
netaddr.h | File | 4.56 KB | 0644 |
|
netdb.h | File | 862 B | 0644 |
|
netscope.h | File | 947 B | 0644 |
|
offset.h | File | 699 B | 0644 |
|
once.h | File | 981 B | 0644 |
|
ondestroy.h | File | 2.79 KB | 0644 |
|
os.h | File | 670 B | 0644 |
|
parseint.h | File | 1.49 KB | 0644 |
|
platform.h | File | 9.31 KB | 0644 |
|
pool.h | File | 3.42 KB | 0644 |
|
portset.h | File | 3.21 KB | 0644 |
|
print.h | File | 2.49 KB | 0644 |
|
queue.h | File | 4.66 KB | 0644 |
|
quota.h | File | 2.29 KB | 0644 |
|
radix.h | File | 6.37 KB | 0644 |
|
random.h | File | 2.99 KB | 0644 |
|
ratelimiter.h | File | 3.38 KB | 0644 |
|
refcount.h | File | 7.89 KB | 0644 |
|
regex.h | File | 766 B | 0644 |
|
region.h | File | 1.99 KB | 0644 |
|
resource.h | File | 2.8 KB | 0644 |
|
result.h | File | 4.62 KB | 0644 |
|
resultclass.h | File | 1.56 KB | 0644 |
|
rwlock.h | File | 3.6 KB | 0644 |
|
safe.h | File | 1.21 KB | 0644 |
|
serial.h | File | 1.4 KB | 0644 |
|
sha1.h | File | 1.52 KB | 0644 |
|
sha2.h | File | 5.65 KB | 0644 |
|
sockaddr.h | File | 6 KB | 0644 |
|
socket.h | File | 35.81 KB | 0644 |
|
stat.h | File | 805 B | 0644 |
|
stats.h | File | 3.02 KB | 0644 |
|
stdio.h | File | 1.74 KB | 0644 |
|
stdlib.h | File | 703 B | 0644 |
|
stdtime.h | File | 1.3 KB | 0644 |
|
strerror.h | File | 776 B | 0644 |
|
string.h | File | 5.94 KB | 0644 |
|
symtab.h | File | 4.21 KB | 0644 |
|
syslog.h | File | 843 B | 0644 |
|
task.h | File | 21.08 KB | 0644 |
|
taskpool.h | File | 3.61 KB | 0644 |
|
thread.h | File | 1.47 KB | 0644 |
|
time.h | File | 8.66 KB | 0644 |
|
timer.h | File | 10.54 KB | 0644 |
|
tm.h | File | 894 B | 0644 |
|
types.h | File | 5.54 KB | 0644 |
|
util.h | File | 7.49 KB | 0644 |
|
version.h | File | 688 B | 0644 |
|
xml.h | File | 1.07 KB | 0644 |
|