2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 06:25:31 +00:00

Keep track of the number of times the system malloc() has

failed, to help determine whether a server crash resulted
from a bug in the handling of an out-of-memory condition
or not.
This commit is contained in:
Andreas Gustafsson
2001-06-11 20:27:16 +00:00
parent 8de7014e56
commit 509ef0c871

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: mem.c,v 1.92 2001/06/05 22:14:18 tale Exp $ */
/* $Id: mem.c,v 1.93 2001/06/11 20:27:16 gson Exp $ */
#include <config.h>
@@ -139,6 +139,8 @@ struct isc_mem {
#if ISC_MEM_TRACKLINES
ISC_LIST(debuglink_t) debuglist;
#endif
unsigned int memalloc_failures;
};
#define MEMPOOL_MAGIC ISC_MAGIC('M', 'E', 'M', 'p')
@@ -331,8 +333,10 @@ more_basic_blocks(isc_mem_t *ctx) {
table_size = ctx->basic_table_size + TABLE_INCREMENT;
table = (ctx->memalloc)(ctx->arg,
table_size * sizeof (unsigned char *));
if (table == NULL)
if (table == NULL) {
ctx->memalloc_failures++;
return (ISC_FALSE);
}
if (ctx->basic_table_size != 0) {
memcpy(table, ctx->basic_table,
ctx->basic_table_size *
@@ -344,8 +348,10 @@ more_basic_blocks(isc_mem_t *ctx) {
}
new = (ctx->memalloc)(ctx->arg, NUM_BASIC_BLOCKS * ctx->mem_target);
if (new == NULL)
if (new == NULL) {
ctx->memalloc_failures++;
return (ISC_FALSE);
}
ctx->total += increment;
ctx->basic_table[ctx->basic_table_count] = new;
ctx->basic_table_count++;
@@ -449,19 +455,20 @@ mem_getunlocked(isc_mem_t *ctx, size_t size) {
goto done;
}
ret = (ctx->memalloc)(ctx->arg, size);
if (ret != NULL) {
ctx->total += size;
ctx->inuse += size;
ctx->stats[ctx->max_size].gets++;
ctx->stats[ctx->max_size].totalgets++;
/*
* If we don't set new_size to size, then the
* ISC_MEM_FILL code might write over bytes we
* don't own.
*/
new_size = size;
if (ret == NULL) {
ctx->memalloc_failures++;
goto done;
}
goto done;
ctx->total += size;
ctx->inuse += size;
ctx->stats[ctx->max_size].gets++;
ctx->stats[ctx->max_size].totalgets++;
/*
* If we don't set new_size to size, then the
* ISC_MEM_FILL code might write over bytes we
* don't own.
*/
new_size = size;
}
/*
@@ -573,6 +580,8 @@ mem_get(isc_mem_t *ctx, size_t size) {
#endif
ret = (ctx->memalloc)(ctx->arg, size);
if (ret == NULL)
ctx->memalloc_failures++;
#if ISC_MEM_FILL
if (ret != NULL)
@@ -750,6 +759,8 @@ isc_mem_createx(size_t init_max_size, size_t target_size,
ISC_LIST_INIT(ctx->debuglist);
#endif
ctx->memalloc_failures = 0;
*ctxp = ctx;
return (ISC_R_SUCCESS);