if (ctx->basic_table_count == ctx->basic_table_size) {
table_size = ctx->basic_table_size + TABLE_INCREMENT;
table = (ctx->memalloc)(table_size * sizeof(unsigned char *));
- RUNTIME_CHECK(table != NULL);
ctx->malloced += table_size * sizeof(unsigned char *);
if (ctx->malloced > ctx->maxmalloced)
ctx->maxmalloced = ctx->malloced;
}
tmp = (ctx->memalloc)(NUM_BASIC_BLOCKS * ctx->mem_target);
- RUNTIME_CHECK(tmp != NULL);
ctx->total += NUM_BASIC_BLOCKS * ctx->mem_target;;
ctx->basic_table[ctx->basic_table_count] = tmp;
ctx->basic_table_count++;
* memget() was called on something beyond our upper limit.
*/
ret = (ctx->memalloc)(size);
- RUNTIME_CHECK(ret != NULL);
ctx->total += size;
ctx->inuse += size;
ctx->stats[ctx->max_size].gets++;
size += 1;
#endif
ret = (ctx->memalloc)(size);
- RUNTIME_CHECK(ret != NULL);
if (ISC_UNLIKELY((ctx->flags & ISC_MEMFLAG_FILL) != 0)) {
if (ISC_LIKELY(ret != NULL))
static void
mem_create(isc_mem_t **ctxp, unsigned int flags)
{
- isc__mem_t *ctx;
-
REQUIRE(ctxp != NULL && *ctxp == NULL);
+ isc__mem_t *ctx;
+
STATIC_ASSERT((ALIGNMENT_SIZE & (ALIGNMENT_SIZE - 1)) == 0,
"wrong alignment size");
ctx->highest = NULL;
ctx->stats = (ctx->memalloc)((ctx->max_size+1) * sizeof(struct stats));
- RUNTIME_CHECK(ctx->stats != NULL);
memset(ctx->stats, 0, (ctx->max_size + 1) * sizeof(struct stats));
ctx->malloced += (ctx->max_size+1) * sizeof(struct stats);
ctx->mem_target = DEF_MEM_TARGET;
ctx->freelists = (ctx->memalloc)(ctx->max_size *
sizeof(element *));
- RUNTIME_CHECK(ctx->freelists != NULL);
memset(ctx->freelists, 0,
ctx->max_size * sizeof(element *));
ctx->malloced += ctx->max_size * sizeof(element *);
ctx->debuglist = (ctx->memalloc)((DEBUG_TABLE_COUNT *
sizeof(debuglist_t)));
- RUNTIME_CHECK(ctx->debuglist != NULL);
for (i = 0; i < DEBUG_TABLE_COUNT; i++)
ISC_LIST_INIT(ctx->debuglist[i]);
ctx->malloced += DEBUG_TABLE_COUNT * sizeof(debuglist_t);
void
isc_mem_attach(isc_mem_t *source0, isc_mem_t **targetp) {
- isc__mem_t *source = (isc__mem_t *)source0;
-
- REQUIRE(VALID_CONTEXT(source));
+ REQUIRE(VALID_CONTEXT(source0));
REQUIRE(targetp != NULL && *targetp == NULL);
+ isc__mem_t *source = (isc__mem_t *)source0;
+
isc_refcount_increment(&source->references);
*targetp = (isc_mem_t *)source;
void
isc_mem_detach(isc_mem_t **ctxp) {
REQUIRE(ctxp != NULL && VALID_CONTEXT(*ctxp));
+
isc__mem_t *ctx = (isc__mem_t *)*ctxp;
*ctxp = NULL;
isc___mem_putanddetach(isc_mem_t **ctxp, void *ptr, size_t size FLARG) {
REQUIRE(ctxp != NULL && VALID_CONTEXT(*ctxp));
REQUIRE(ptr != NULL);
+
isc__mem_t *ctx = (isc__mem_t *)*ctxp;
*ctxp = NULL;
void
isc_mem_destroy(isc_mem_t **ctxp) {
- isc__mem_t *ctx;
-
/*
* This routine provides legacy support for callers who use mctxs
* without attaching/detaching.
*/
- REQUIRE(ctxp != NULL);
- ctx = (isc__mem_t *)*ctxp;
- REQUIRE(VALID_CONTEXT(ctx));
+ REQUIRE(ctxp != NULL && VALID_CONTEXT(*ctxp));
+
+ isc__mem_t *ctx = (isc__mem_t *)*ctxp;
#if ISC_MEM_TRACKLINES
if (isc_refcount_decrement(&ctx->references) > 1) {
void *
isc___mem_get(isc_mem_t *ctx0, size_t size FLARG) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
void *ptr;
bool call_water = false;
- REQUIRE(VALID_CONTEXT(ctx));
-
if (ISC_UNLIKELY((isc_mem_debugging &
(ISC_MEM_DEBUGSIZE|ISC_MEM_DEBUGCTX)) != 0))
return (isc__mem_allocate(ctx0, size FLARG_PASS));
void
isc___mem_put(isc_mem_t *ctx0, void *ptr, size_t size FLARG) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+ REQUIRE(ptr != NULL);
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
bool call_water = false;
size_info *si;
size_t oldsize;
- REQUIRE(VALID_CONTEXT(ctx));
- REQUIRE(ptr != NULL);
-
if (ISC_UNLIKELY((isc_mem_debugging &
(ISC_MEM_DEBUGSIZE|ISC_MEM_DEBUGCTX)) != 0))
{
void
isc_mem_waterack(isc_mem_t *ctx0, int flag) {
- isc__mem_t *ctx = (isc__mem_t *)ctx0;
+ REQUIRE(VALID_CONTEXT(ctx0));
- REQUIRE(VALID_CONTEXT(ctx));
+ isc__mem_t *ctx = (isc__mem_t *)ctx0;
MCTXLOCK(ctx);
if (flag == ISC_MEM_LOWATER)
*/
void
isc_mem_stats(isc_mem_t *ctx0, FILE *out) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
size_t i;
const struct stats *s;
const isc__mempool_t *pool;
- REQUIRE(VALID_CONTEXT(ctx));
MCTXLOCK(ctx);
for (i = 0; i <= ctx->max_size; i++) {
void *
isc___mem_allocate(isc_mem_t *ctx0, size_t size FLARG) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
size_info *si;
bool call_water = false;
- REQUIRE(VALID_CONTEXT(ctx));
-
MCTXLOCK(ctx);
si = mem_allocateunlocked((isc_mem_t *)ctx, size);
if (((ctx->flags & ISC_MEMFLAG_INTERNAL) == 0)) {
void *
isc___mem_reallocate(isc_mem_t *ctx0, void *ptr, size_t size FLARG) {
- isc__mem_t *ctx = (isc__mem_t *)ctx0;
+ REQUIRE(VALID_CONTEXT(ctx0));
+
void *new_ptr = NULL;
size_t oldsize, copysize;
- REQUIRE(VALID_CONTEXT(ctx));
-
/*
* This function emulates the realloc(3) standard library function:
* - if size > 0, allocate new memory; and if ptr is non NULL, copy
void
isc___mem_free(isc_mem_t *ctx0, void *ptr FLARG) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+ REQUIRE(ptr != NULL);
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
size_info *si;
size_t size;
bool call_water= false;
- REQUIRE(VALID_CONTEXT(ctx));
- REQUIRE(ptr != NULL);
-
if (ISC_UNLIKELY((isc_mem_debugging & ISC_MEM_DEBUGCTX) != 0)) {
si = &(((size_info *)ptr)[-2]);
REQUIRE(si->u.ctx == ctx);
char *
isc___mem_strdup(isc_mem_t *mctx0, const char *s FLARG) {
+ REQUIRE(VALID_CONTEXT(mctx0));
+ REQUIRE(s != NULL);
+
isc__mem_t *mctx = (isc__mem_t *)mctx0;
size_t len;
char *ns;
- REQUIRE(VALID_CONTEXT(mctx));
- REQUIRE(s != NULL);
-
len = strlen(s) + 1;
ns = isc__mem_allocate((isc_mem_t *)mctx, len FLARG_PASS);
void
isc_mem_setdestroycheck(isc_mem_t *ctx0, bool flag) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
- REQUIRE(VALID_CONTEXT(ctx));
MCTXLOCK(ctx);
ctx->checkfree = flag;
size_t
isc_mem_inuse(isc_mem_t *ctx0) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
size_t inuse;
- REQUIRE(VALID_CONTEXT(ctx));
MCTXLOCK(ctx);
inuse = ctx->inuse;
size_t
isc_mem_maxinuse(isc_mem_t *ctx0) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
size_t maxinuse;
- REQUIRE(VALID_CONTEXT(ctx));
MCTXLOCK(ctx);
maxinuse = ctx->maxinuse;
size_t
isc_mem_total(isc_mem_t *ctx0) {
+ REQUIRE(VALID_CONTEXT(ctx0));
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
size_t total;
- REQUIRE(VALID_CONTEXT(ctx));
MCTXLOCK(ctx);
total = ctx->total;
isc_mem_setwater(isc_mem_t *ctx0, isc_mem_water_t water, void *water_arg,
size_t hiwater, size_t lowater)
{
+ REQUIRE(VALID_CONTEXT(ctx0));
+ REQUIRE(hiwater >= lowater);
+
isc__mem_t *ctx = (isc__mem_t *)ctx0;
bool callwater = false;
isc_mem_water_t oldwater;
void *oldwater_arg;
- REQUIRE(VALID_CONTEXT(ctx));
- REQUIRE(hiwater >= lowater);
-
MCTXLOCK(ctx);
oldwater = ctx->water;
oldwater_arg = ctx->water_arg;
bool
isc_mem_isovermem(isc_mem_t *ctx0) {
- isc__mem_t *ctx = (isc__mem_t *)ctx0;
+ REQUIRE(VALID_CONTEXT(ctx0));
- REQUIRE(VALID_CONTEXT(ctx));
+ isc__mem_t *ctx = (isc__mem_t *)ctx0;
/*
* We don't bother to lock the context because 100% accuracy isn't
void
isc_mem_setname(isc_mem_t *ctx0, const char *name, void *tag) {
- isc__mem_t *ctx = (isc__mem_t *)ctx0;
+ REQUIRE(VALID_CONTEXT(ctx0));
- REQUIRE(VALID_CONTEXT(ctx));
+ isc__mem_t *ctx = (isc__mem_t *)ctx0;
LOCK(&ctx->lock);
strlcpy(ctx->name, name, sizeof(ctx->name));
const char *
isc_mem_getname(isc_mem_t *ctx0) {
- isc__mem_t *ctx = (isc__mem_t *)ctx0;
+ REQUIRE(VALID_CONTEXT(ctx0));
- REQUIRE(VALID_CONTEXT(ctx));
+ isc__mem_t *ctx = (isc__mem_t *)ctx0;
if (ctx->name[0] == 0)
return ("");
void *
isc_mem_gettag(isc_mem_t *ctx0) {
- isc__mem_t *ctx = (isc__mem_t *)ctx0;
+ REQUIRE(VALID_CONTEXT(ctx0));
- REQUIRE(VALID_CONTEXT(ctx));
+ isc__mem_t *ctx = (isc__mem_t *)ctx0;
return (ctx->tag);
}
void
isc_mempool_create(isc_mem_t *mctx0, size_t size, isc_mempool_t **mpctxp) {
- isc__mem_t *mctx = (isc__mem_t *)mctx0;
- isc__mempool_t *mpctx;
-
- REQUIRE(VALID_CONTEXT(mctx));
+ REQUIRE(VALID_CONTEXT(mctx0));
REQUIRE(size > 0U);
REQUIRE(mpctxp != NULL && *mpctxp == NULL);
+ isc__mem_t *mctx = (isc__mem_t *)mctx0;
+ isc__mempool_t *mpctx;
+
/*
* Allocate space for this pool, initialize values, and if all works
* well, attach to the memory context.
*/
mpctx = isc_mem_get((isc_mem_t *)mctx, sizeof(isc__mempool_t));
- RUNTIME_CHECK(mpctx != NULL);
mpctx->common.impmagic = MEMPOOL_MAGIC;
mpctx->common.magic = ISCAPI_MPOOL_MAGIC;
void
isc_mempool_setname(isc_mempool_t *mpctx0, const char *name) {
- isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
-
+ REQUIRE(VALID_MEMPOOL(mpctx0));
REQUIRE(name != NULL);
- REQUIRE(VALID_MEMPOOL(mpctx));
+
+ isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
#if ISC_MEMPOOL_NAMES
if (mpctx->lock != NULL)
void
isc_mempool_destroy(isc_mempool_t **mpctxp) {
+ REQUIRE(mpctxp != NULL);
+ REQUIRE(VALID_MEMPOOL(*mpctxp));
+
isc__mempool_t *mpctx;
isc__mem_t *mctx;
isc_mutex_t *lock;
element *item;
- REQUIRE(mpctxp != NULL);
mpctx = (isc__mempool_t *)*mpctxp;
- REQUIRE(VALID_MEMPOOL(mpctx));
#if ISC_MEMPOOL_NAMES
if (mpctx->allocated > 0)
UNEXPECTED_ERROR(__FILE__, __LINE__,
void
isc_mempool_associatelock(isc_mempool_t *mpctx0, isc_mutex_t *lock) {
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+ REQUIRE(lock != NULL);
+
isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
- REQUIRE(VALID_MEMPOOL(mpctx));
REQUIRE(mpctx->lock == NULL);
- REQUIRE(lock != NULL);
mpctx->lock = lock;
}
void *
isc__mempool_get(isc_mempool_t *mpctx0 FLARG) {
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+
isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
element *item;
isc__mem_t *mctx;
unsigned int i;
- REQUIRE(VALID_MEMPOOL(mpctx));
-
mctx = mpctx->mctx;
if (mpctx->lock != NULL)
/* coverity[+free : arg-1] */
void
isc__mempool_put(isc_mempool_t *mpctx0, void *mem FLARG) {
- isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
- isc__mem_t *mctx;
- element *item;
-
- REQUIRE(VALID_MEMPOOL(mpctx));
+ REQUIRE(VALID_MEMPOOL(mpctx0));
REQUIRE(mem != NULL);
- mctx = mpctx->mctx;
+ isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
+ isc__mem_t *mctx = mpctx->mctx;
+ element *item;
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
void
isc_mempool_setfreemax(isc_mempool_t *mpctx0, unsigned int limit) {
- isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
+ REQUIRE(VALID_MEMPOOL(mpctx0));
- REQUIRE(VALID_MEMPOOL(mpctx));
+ isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
unsigned int
isc_mempool_getfreemax(isc_mempool_t *mpctx0) {
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+
isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
unsigned int freemax;
- REQUIRE(VALID_MEMPOOL(mpctx));
-
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
unsigned int
isc_mempool_getfreecount(isc_mempool_t *mpctx0) {
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+
isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
unsigned int freecount;
- REQUIRE(VALID_MEMPOOL(mpctx));
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
void
isc_mempool_setmaxalloc(isc_mempool_t *mpctx0, unsigned int limit) {
- isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
-
+ REQUIRE(VALID_MEMPOOL(mpctx0));
REQUIRE(limit > 0);
- REQUIRE(VALID_MEMPOOL(mpctx));
+ isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
unsigned int
isc_mempool_getmaxalloc(isc_mempool_t *mpctx0) {
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+
isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
unsigned int maxalloc;
- REQUIRE(VALID_MEMPOOL(mpctx));
-
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
unsigned int
isc_mempool_getallocated(isc_mempool_t *mpctx0) {
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+
isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
unsigned int allocated;
- REQUIRE(VALID_MEMPOOL(mpctx));
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
void
isc_mempool_setfillcount(isc_mempool_t *mpctx0, unsigned int limit) {
- isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
-
+ REQUIRE(VALID_MEMPOOL(mpctx0));
REQUIRE(limit > 0);
- REQUIRE(VALID_MEMPOOL(mpctx));
+
+ isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
unsigned int
isc_mempool_getfillcount(isc_mempool_t *mpctx0) {
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+
isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
unsigned int fillcount;
- REQUIRE(VALID_MEMPOOL(mpctx));
-
if (mpctx->lock != NULL)
LOCK(mpctx->lock);
xml_renderctx(isc__mem_t *ctx, summarystat_t *summary,
xmlTextWriterPtr writer)
{
- int xmlrc;
-
REQUIRE(VALID_CONTEXT(ctx));
+ int xmlrc;
+
MCTXLOCK(ctx);
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "context"));
static isc_result_t
json_renderctx(isc__mem_t *ctx, summarystat_t *summary, json_object *array) {
- json_object *ctxobj, *obj;
- char buf[1024];
-
REQUIRE(VALID_CONTEXT(ctx));
REQUIRE(summary != NULL);
REQUIRE(array != NULL);
+ json_object *ctxobj, *obj;
+ char buf[1024];
+
MCTXLOCK(ctx);
summary->contextsize += sizeof(*ctx) +
void
isc__mem_printactive(isc_mem_t *ctx0, FILE *file) {
#if ISC_MEM_TRACKLINES
- isc__mem_t *ctx = (isc__mem_t *)ctx0;
-
- REQUIRE(VALID_CONTEXT(ctx));
+ REQUIRE(VALID_CONTEXT(ctx0));
REQUIRE(file != NULL);
+ isc__mem_t *ctx = (isc__mem_t *)ctx0;
+
print_active(ctx, file);
#else
UNUSED(ctx0);