Memory pool debug enabled with NXT_DEBUG_ALLOC define.

This commit is contained in:
Max Romanov
2017-07-12 20:32:20 +03:00
parent 7d3fd1c96c
commit 48afadfe7c
2 changed files with 82 additions and 28 deletions

View File

@@ -122,13 +122,9 @@ nxt_log_debug(_log, ...) \
} while (0) } while (0)
#define nxt_debug_alloc(_fmt, ARGS...) \
nxt_thread_log_debug("%08p: " _fmt, mp, ##ARGS)
#else #else
#define nxt_debug(...) #define nxt_debug(...)
#define nxt_debug_alloc(...)
#define \ #define \
nxt_log_debug(...) nxt_log_debug(...)
@@ -136,6 +132,18 @@ nxt_log_debug(...)
#endif #endif
#if (NXT_DEBUG_ALLOC)
#define nxt_debug_alloc(...) \
nxt_thread_log_debug(__VA_ARGS__)
#else
#define nxt_debug_alloc(...)
#endif
#define \ #define \
nxt_main_log_emerg(...) \ nxt_main_log_emerg(...) \
nxt_log_emerg(&nxt_main_log, __VA_ARGS__) nxt_log_emerg(&nxt_main_log, __VA_ARGS__)

View File

@@ -272,6 +272,9 @@ nxt_mp_create(size_t cluster_size, size_t page_alignment, size_t page_size,
nxt_rbtree_init(&mp->blocks, nxt_mp_rbtree_compare); nxt_rbtree_init(&mp->blocks, nxt_mp_rbtree_compare);
} }
nxt_debug_alloc("mp %p create(%uz, %uz, %uz, %uz)", mp, cluster_size,
page_alignment, page_size, min_chunk_size);
return mp; return mp;
} }
@@ -283,7 +286,7 @@ nxt_mp_destroy(nxt_mp_t *mp)
nxt_mp_block_t *block; nxt_mp_block_t *block;
nxt_rbtree_node_t *node, *next; nxt_rbtree_node_t *node, *next;
nxt_debug_alloc("mp destroy"); nxt_debug_alloc("mp %p destroy", mp);
nxt_mp_thread_assert(mp); nxt_mp_thread_assert(mp);
@@ -350,17 +353,28 @@ nxt_mp_is_empty(nxt_mp_t *mp)
void * void *
nxt_mp_alloc(nxt_mp_t *mp, size_t size) nxt_mp_alloc(nxt_mp_t *mp, size_t size)
{ {
nxt_debug_alloc("mp alloc: %uz", size); void *p;
#if !(NXT_DEBUG_MEMORY) #if !(NXT_DEBUG_MEMORY)
if (size <= mp->page_size) { if (size <= mp->page_size) {
return nxt_mp_alloc_small(mp, size); p = nxt_mp_alloc_small(mp, size);
} else {
#endif
p = nxt_mp_alloc_large(mp, NXT_MAX_ALIGNMENT, size);
#if !(NXT_DEBUG_MEMORY)
} }
#endif #endif
return nxt_mp_alloc_large(mp, NXT_MAX_ALIGNMENT, size); nxt_debug_alloc("mp %p alloc(%uz): %p", mp, size, p);
return p;
} }
@@ -382,7 +396,8 @@ nxt_mp_zalloc(nxt_mp_t *mp, size_t size)
void * void *
nxt_mp_align(nxt_mp_t *mp, size_t alignment, size_t size) nxt_mp_align(nxt_mp_t *mp, size_t alignment, size_t size)
{ {
nxt_debug_alloc("mp align: @%uz:%uz", alignment, size); void *p;
size_t aligned_size;
/* Alignment must be a power of 2. */ /* Alignment must be a power of 2. */
@@ -390,20 +405,31 @@ nxt_mp_align(nxt_mp_t *mp, size_t alignment, size_t size)
#if !(NXT_DEBUG_MEMORY) #if !(NXT_DEBUG_MEMORY)
if (size <= mp->page_size && alignment <= mp->page_alignment) { aligned_size = nxt_max(size, alignment);
size = nxt_max(size, alignment);
if (aligned_size <= mp->page_size && alignment <= mp->page_alignment) {
p = nxt_mp_alloc_small(mp, aligned_size);
} else {
#endif
p = nxt_mp_alloc_large(mp, alignment, size);
#if !(NXT_DEBUG_MEMORY)
if (size <= mp->page_size) {
return nxt_mp_alloc_small(mp, size);
}
} }
#endif #endif
return nxt_mp_alloc_large(mp, alignment, size); } else {
p = NULL;
} }
return NULL; nxt_debug_alloc("mp %p align(@%uz:%uz): %p", mp, alignment, size, p);
return p;
} }
@@ -526,7 +552,7 @@ nxt_mp_alloc_small(nxt_mp_t *mp, size_t size)
} }
} }
nxt_debug_alloc("mp chunk:%uz alloc: %p", nxt_debug_alloc("mp %p chunk:%uz alloc: %p", mp,
page->size << mp->chunk_size_shift, p); page->size << mp->chunk_size_shift, p);
return p; return p;
@@ -579,8 +605,6 @@ found:
p += page->u.taken; p += page->u.taken;
page->u.taken += size; page->u.taken += size;
nxt_debug_alloc("mp get: %p", p);
return p; return p;
} }
@@ -723,7 +747,7 @@ nxt_mp_free(nxt_mp_t *mp, void *p)
nxt_mp_thread_assert(mp); nxt_mp_thread_assert(mp);
nxt_debug_alloc("mp free %p", p); nxt_debug_alloc("mp %p free(%p)", mp, p);
block = nxt_mp_find_block(&mp->blocks, p); block = nxt_mp_find_block(&mp->blocks, p);
@@ -910,7 +934,7 @@ nxt_mp_retain(nxt_mp_t *mp, size_t size)
if (nxt_fast_path(p != NULL)) { if (nxt_fast_path(p != NULL)) {
mp->retain++; mp->retain++;
nxt_debug_alloc("mp retain: %uD", mp->retain); nxt_debug_alloc("mp %p retain: %uD", mp, mp->retain);
} }
return p; return p;
@@ -924,7 +948,7 @@ nxt_mp_release(nxt_mp_t *mp, void *p)
mp->retain--; mp->retain--;
nxt_debug_alloc("mp release: %uD", mp->retain); nxt_debug_alloc("mp %p release: %uD", mp, mp->retain);
if (mp->retain == 0) { if (mp->retain == 0) {
nxt_mp_destroy(mp); nxt_mp_destroy(mp);
@@ -939,35 +963,57 @@ nxt_mp_release(nxt_mp_t *mp, void *p)
void * void *
nxt_mp_nget(nxt_mp_t *mp, size_t size) nxt_mp_nget(nxt_mp_t *mp, size_t size)
{ {
nxt_debug_alloc("mp nget: %uz", size); void *p;
#if !(NXT_DEBUG_MEMORY) #if !(NXT_DEBUG_MEMORY)
if (size <= mp->page_size) { if (size <= mp->page_size) {
return nxt_mp_get_small(mp, &mp->nget_pages, size); p = nxt_mp_get_small(mp, &mp->nget_pages, size);
} else {
#endif
p = nxt_mp_alloc_large(mp, NXT_MAX_ALIGNMENT, size);
#if !(NXT_DEBUG_MEMORY)
} }
#endif #endif
return nxt_mp_alloc_large(mp, NXT_MAX_ALIGNMENT, size); nxt_debug_alloc("mp %p nget(%uz): %p", mp, size, p);
return p;
} }
void * void *
nxt_mp_get(nxt_mp_t *mp, size_t size) nxt_mp_get(nxt_mp_t *mp, size_t size)
{ {
nxt_debug_alloc("mp get: %uz", size); void *p;
#if !(NXT_DEBUG_MEMORY) #if !(NXT_DEBUG_MEMORY)
if (size <= mp->page_size) { if (size <= mp->page_size) {
size = nxt_max(size, NXT_MAX_ALIGNMENT); size = nxt_max(size, NXT_MAX_ALIGNMENT);
return nxt_mp_get_small(mp, &mp->get_pages, size); p = nxt_mp_get_small(mp, &mp->get_pages, size);
} else {
#endif
p = nxt_mp_alloc_large(mp, NXT_MAX_ALIGNMENT, size);
#if !(NXT_DEBUG_MEMORY)
} }
#endif #endif
return nxt_mp_alloc_large(mp, NXT_MAX_ALIGNMENT, size); nxt_debug_alloc("mp %p get(%uz): %p", mp, size, p);
return p;
} }