pool.h File Reference

An object pool is a mechanism for sharing a small pool of fungible objects among a large number of objects that depend on them. More...

#include <isc/lang.h>
#include <isc/mem.h>
#include <isc/types.h>

Go to the source code of this file.

Defines

#define ISC_OBJPOOL_H   1

Typedefs

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).
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'.
void isc_pool_destroy (isc_pool_t **poolp)
 Destroy a task pool. The tasks in the pool are detached but not shut down.

Variables

ISC_LANG_BEGINDECLS typedef void(* isc_pooldeallocator_t )(void **object)


Detailed Description

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.

Definition in file pool.h.


Define Documentation

#define ISC_OBJPOOL_H   1

Definition at line 18 of file pool.h.


Typedef Documentation

typedef isc_result_t(* isc_poolinitializer_t)(void **target, void *arg)

Definition at line 53 of file pool.h.

typedef struct isc_pool isc_pool_t

Definition at line 55 of file pool.h.


Function Documentation

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:

Ensures:

Returns:

Definition at line 72 of file pool.c.

References alloc_pool(), isc_pool::free, isc_pool::init, isc_pool::initarg, INSIST, isc_pool_destroy(), ISC_R_SUCCESS, and isc_pool::pool.

Referenced by ATF_TC_BODY(), and dns_zonemgr_setsize().

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.).

Definition at line 106 of file pool.c.

References isc_pool::count, isc_random_get(), and isc_pool::pool.

Referenced by ATF_TC_BODY(), and dns_zonemgr_createzone().

int isc_pool_count ( isc_pool_t pool  ) 

Returns the number of objcts in the pool 'pool'.

Definition at line 113 of file pool.c.

References isc_pool::count, and REQUIRE.

Referenced by ATF_TC_BODY().

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:

Ensures:

Returns:

Definition at line 119 of file pool.c.

References alloc_pool(), isc_pool::count, isc_pool::free, isc_pool::init, isc_pool::initarg, isc_pool_destroy(), ISC_R_SUCCESS, isc_pool::mctx, isc_pool::pool, and REQUIRE.

Referenced by ATF_TC_BODY(), and dns_zonemgr_setsize().

void isc_pool_destroy ( isc_pool_t **  poolp  ) 

Destroy a task pool. The tasks in the pool are detached but not shut down.

Requires:

Definition at line 167 of file pool.c.

References isc_pool::count, isc_pool::free, isc_mem_put, isc_mem_putanddetach, isc_pool::mctx, and isc_pool::pool.

Referenced by ATF_TC_BODY(), dns_zonemgr_shutdown(), isc_pool_create(), and isc_pool_expand().


Variable Documentation

ISC_LANG_BEGINDECLS typedef void(* isc_pooldeallocator_t)(void **object)


Generated on Tue Apr 28 17:41:15 2015 by Doxygen 1.5.4 for BIND9 Internals 9.11.0pre-alpha