mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-29 05:28:00 +00:00
Simplify isc_mem_create() to always use defaults and never fail
Previously, the isc_mem_create() and isc_mem_createx() functions took `max_size` and `target_size` as first two arguments. Those values were never used in the BIND 9 code. The refactoring removes those arguments and let BIND 9 always use the default values. Previously, the isc_mem_create() and isc_mem_createx() functions could have failed because of failed memory allocation. As this was no longer true and the functions have always returned ISC_R_SUCCESS, the have been refactored to return void.
This commit is contained in:
parent
3be71081bf
commit
1b716a39f5
@ -60,8 +60,7 @@ int ctx_init(void) {
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isc_mem_create(0, 0, &ctx.mem) != ISC_R_SUCCESS)
|
isc_mem_create(&ctx.mem);
|
||||||
goto done;
|
|
||||||
|
|
||||||
if (isc_log_create(ctx.mem, &ctx.log, &ctx.logcfg) != ISC_R_SUCCESS)
|
if (isc_log_create(ctx.mem, &ctx.log, &ctx.logcfg) != ISC_R_SUCCESS)
|
||||||
goto done;
|
goto done;
|
||||||
@ -337,6 +336,3 @@ struct DNSConf {
|
|||||||
%readonly
|
%readonly
|
||||||
dns_c_ctx_t *confctx;
|
dns_c_ctx_t *confctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -282,8 +282,8 @@ rudimentary initialization of both.
|
|||||||
isc_log_t *lctx;
|
isc_log_t *lctx;
|
||||||
isc_logconfig_t *lcfg;
|
isc_logconfig_t *lcfg;
|
||||||
|
|
||||||
if (isc_mem_create(0, 0, &mctx) != ISC_R_SUCCESS) ||
|
isc_mem_create(&mctx);
|
||||||
isc_log_create(mctx, &lctx, &lcfg) != ISC_R_SUCCESS))
|
if (isc_log_create(mctx, &lctx, &lcfg) != ISC_R_SUCCESS))
|
||||||
oops_it_didnt_work();
|
oops_it_didnt_work();
|
||||||
|
|
||||||
3) Initalize any additional libraries. The convention for the name of
|
3) Initalize any additional libraries. The convention for the name of
|
||||||
|
@ -504,7 +504,7 @@ memory has not been freed when BIND shuts down.
|
|||||||
To create a basic memory context, use:
|
To create a basic memory context, use:
|
||||||
|
|
||||||
isc_mem_t *mctx = NULL;
|
isc_mem_t *mctx = NULL;
|
||||||
result = isc_mem_create(0, 0, &mctx);
|
isc_mem_create(&mctx);
|
||||||
|
|
||||||
(The zeroes are tuning parameters, `max_size` and `target_size`: Any
|
(The zeroes are tuning parameters, `max_size` and `target_size`: Any
|
||||||
allocations smaller than `max_size` will be satisfied by getting
|
allocations smaller than `max_size` will be satisfied by getting
|
||||||
@ -1069,9 +1069,10 @@ the following steps need to be taken to initialize it.
|
|||||||
isc_log_t *lctx;
|
isc_log_t *lctx;
|
||||||
isc_logconfig_t *lcfg;
|
isc_logconfig_t *lcfg;
|
||||||
|
|
||||||
if (isc_mem_create(0, 0, &mctx) != ISC_R_SUCCESS) ||
|
isc_mem_create(&mctx);
|
||||||
isc_log_create(mctx, &lctx, &lcfg) != ISC_R_SUCCESS))
|
if (isc_log_create(mctx, &lctx, &lcfg) != ISC_R_SUCCESS)) {
|
||||||
oops_it_didnt_work();
|
oops_it_didnt_work();
|
||||||
|
}
|
||||||
|
|
||||||
1. Initalize any additional libraries. The convention for the name of
|
1. Initalize any additional libraries. The convention for the name of
|
||||||
the initialization function is `{library}_log_init()`, with a pointer to
|
the initialization function is `{library}_log_init()`, with a pointer to
|
||||||
|
@ -252,30 +252,16 @@ struct isc_mempool {
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/*@{*/
|
/*@{*/
|
||||||
isc_result_t
|
void
|
||||||
isc_mem_create(size_t max_size, size_t target_size,
|
isc_mem_create(isc_mem_t **mctxp);
|
||||||
isc_mem_t **mctxp);
|
|
||||||
|
|
||||||
isc_result_t
|
void
|
||||||
isc_mem_createx(size_t max_size, size_t target_size,
|
isc_mem_createx(isc_memalloc_t memalloc, isc_memfree_t memfree,
|
||||||
isc_memalloc_t memalloc, isc_memfree_t memfree,
|
|
||||||
void *arg, isc_mem_t **mctxp, unsigned int flags);
|
void *arg, isc_mem_t **mctxp, unsigned int flags);
|
||||||
|
|
||||||
/*!<
|
/*!<
|
||||||
* \brief Create a memory context.
|
* \brief Create a memory context.
|
||||||
*
|
*
|
||||||
* 'max_size' and 'target_size' are tuning parameters. When
|
|
||||||
* ISC_MEMFLAG_INTERNAL is set, allocations smaller than 'max_size'
|
|
||||||
* will be satisfied by getting blocks of size 'target_size' from the
|
|
||||||
* system allocator and breaking them up into pieces; larger allocations
|
|
||||||
* will use the system allocator directly. If 'max_size' and/or
|
|
||||||
* 'target_size' are zero, default values will be * used. When
|
|
||||||
* ISC_MEMFLAG_INTERNAL is not set, 'target_size' is ignored.
|
|
||||||
*
|
|
||||||
* 'max_size' is also used to size the statistics arrays and the array
|
|
||||||
* used to record active memory when ISC_MEM_DEBUGRECORD is set. Setting
|
|
||||||
* 'max_size' too low can have detrimental effects on performance.
|
|
||||||
*
|
|
||||||
* A memory context created using isc_mem_createx() will obtain
|
* A memory context created using isc_mem_createx() will obtain
|
||||||
* memory from the system by calling 'memalloc' and 'memfree',
|
* memory from the system by calling 'memalloc' and 'memfree',
|
||||||
* passing them the argument 'arg'. A memory context created
|
* passing them the argument 'arg'. A memory context created
|
||||||
|
@ -725,9 +725,8 @@ initialize_action(void) {
|
|||||||
* Public.
|
* Public.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
isc_result_t
|
void
|
||||||
isc_mem_createx(size_t init_max_size, size_t target_size,
|
isc_mem_createx(isc_memalloc_t memalloc, isc_memfree_t memfree, void *arg,
|
||||||
isc_memalloc_t memalloc, isc_memfree_t memfree, void *arg,
|
|
||||||
isc_mem_t **ctxp, unsigned int flags)
|
isc_mem_t **ctxp, unsigned int flags)
|
||||||
{
|
{
|
||||||
isc__mem_t *ctx;
|
isc__mem_t *ctx;
|
||||||
@ -748,10 +747,7 @@ isc_mem_createx(size_t init_max_size, size_t target_size,
|
|||||||
isc_mutex_init(&ctx->lock);
|
isc_mutex_init(&ctx->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (init_max_size == 0U)
|
ctx->max_size = DEF_MAX_SIZE;
|
||||||
ctx->max_size = DEF_MAX_SIZE;
|
|
||||||
else
|
|
||||||
ctx->max_size = init_max_size;
|
|
||||||
ctx->flags = flags;
|
ctx->flags = flags;
|
||||||
isc_refcount_init(&ctx->references, 1);
|
isc_refcount_init(&ctx->references, 1);
|
||||||
memset(ctx->name, 0, sizeof(ctx->name));
|
memset(ctx->name, 0, sizeof(ctx->name));
|
||||||
@ -798,10 +794,7 @@ isc_mem_createx(size_t init_max_size, size_t target_size,
|
|||||||
ctx->maxmalloced += (ctx->max_size+1) * sizeof(struct stats);
|
ctx->maxmalloced += (ctx->max_size+1) * sizeof(struct stats);
|
||||||
|
|
||||||
if ((flags & ISC_MEMFLAG_INTERNAL) != 0) {
|
if ((flags & ISC_MEMFLAG_INTERNAL) != 0) {
|
||||||
if (target_size == 0U)
|
ctx->mem_target = DEF_MEM_TARGET;
|
||||||
ctx->mem_target = DEF_MEM_TARGET;
|
|
||||||
else
|
|
||||||
ctx->mem_target = target_size;
|
|
||||||
ctx->freelists = (memalloc)(arg, ctx->max_size *
|
ctx->freelists = (memalloc)(arg, ctx->max_size *
|
||||||
sizeof(element *));
|
sizeof(element *));
|
||||||
RUNTIME_CHECK(ctx->freelists != NULL);
|
RUNTIME_CHECK(ctx->freelists != NULL);
|
||||||
@ -830,8 +823,6 @@ isc_mem_createx(size_t init_max_size, size_t target_size,
|
|||||||
UNLOCK(&contextslock);
|
UNLOCK(&contextslock);
|
||||||
|
|
||||||
*ctxp = (isc_mem_t *)ctx;
|
*ctxp = (isc_mem_t *)ctx;
|
||||||
|
|
||||||
return (ISC_R_SUCCESS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -2371,11 +2362,10 @@ isc_mem_renderjson(void *memobj0) {
|
|||||||
}
|
}
|
||||||
#endif /* HAVE_JSON_C */
|
#endif /* HAVE_JSON_C */
|
||||||
|
|
||||||
isc_result_t
|
void
|
||||||
isc_mem_create(size_t init_max_size, size_t target_size, isc_mem_t **mctxp) {
|
isc_mem_create(isc_mem_t **mctxp) {
|
||||||
return (isc_mem_createx(init_max_size, target_size,
|
isc_mem_createx(default_memalloc, default_memfree,
|
||||||
default_memalloc, default_memfree,
|
NULL, mctxp, isc_mem_defaultflags);
|
||||||
NULL, mctxp, isc_mem_defaultflags));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user