Fixed building with -DNXT_DEBUG_MEMORY=1 (broken in 10688b89aa16).
This commit is contained in:
134
src/nxt_mp.c
134
src/nxt_mp.c
@@ -138,8 +138,8 @@ struct nxt_mp_s {
|
|||||||
|
|
||||||
|
|
||||||
#if !(NXT_DEBUG_MEMORY)
|
#if !(NXT_DEBUG_MEMORY)
|
||||||
static void *nxt_mp_get_small(nxt_mp_t *mp, nxt_queue_t *pages, size_t size);
|
|
||||||
static void *nxt_mp_alloc_small(nxt_mp_t *mp, size_t size);
|
static void *nxt_mp_alloc_small(nxt_mp_t *mp, size_t size);
|
||||||
|
static void *nxt_mp_get_small(nxt_mp_t *mp, nxt_queue_t *pages, size_t size);
|
||||||
static nxt_mp_page_t *nxt_mp_alloc_page(nxt_mp_t *mp);
|
static nxt_mp_page_t *nxt_mp_alloc_page(nxt_mp_t *mp);
|
||||||
static nxt_mp_block_t *nxt_mp_alloc_cluster(nxt_mp_t *mp);
|
static nxt_mp_block_t *nxt_mp_alloc_cluster(nxt_mp_t *mp);
|
||||||
#endif
|
#endif
|
||||||
@@ -341,23 +341,6 @@ nxt_mp_zalign(nxt_mp_t *mp, size_t alignment, size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if !(NXT_DEBUG_MEMORY)
|
|
||||||
|
|
||||||
nxt_inline u_char *
|
|
||||||
nxt_mp_page_addr(nxt_mp_t *mp, nxt_mp_page_t *page)
|
|
||||||
{
|
|
||||||
size_t page_offset;
|
|
||||||
nxt_mp_block_t *block;
|
|
||||||
|
|
||||||
page_offset = page->number * sizeof(nxt_mp_page_t)
|
|
||||||
+ offsetof(nxt_mp_block_t, pages);
|
|
||||||
|
|
||||||
block = (nxt_mp_block_t *) ((u_char *) page - page_offset);
|
|
||||||
|
|
||||||
return block->start + (page->number << mp->page_size_shift);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
nxt_inline nxt_uint_t
|
nxt_inline nxt_uint_t
|
||||||
nxt_mp_chunk_pages_index(nxt_mp_t *mp, size_t size)
|
nxt_mp_chunk_pages_index(nxt_mp_t *mp, size_t size)
|
||||||
{
|
{
|
||||||
@@ -377,6 +360,23 @@ nxt_mp_chunk_pages_index(nxt_mp_t *mp, size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if !(NXT_DEBUG_MEMORY)
|
||||||
|
|
||||||
|
nxt_inline u_char *
|
||||||
|
nxt_mp_page_addr(nxt_mp_t *mp, nxt_mp_page_t *page)
|
||||||
|
{
|
||||||
|
size_t page_offset;
|
||||||
|
nxt_mp_block_t *block;
|
||||||
|
|
||||||
|
page_offset = page->number * sizeof(nxt_mp_page_t)
|
||||||
|
+ offsetof(nxt_mp_block_t, pages);
|
||||||
|
|
||||||
|
block = (nxt_mp_block_t *) ((u_char *) page - page_offset);
|
||||||
|
|
||||||
|
return block->start + (page->number << mp->page_size_shift);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
nxt_mp_alloc_small(nxt_mp_t *mp, size_t size)
|
nxt_mp_alloc_small(nxt_mp_t *mp, size_t size)
|
||||||
{
|
{
|
||||||
@@ -450,6 +450,55 @@ nxt_mp_alloc_small(nxt_mp_t *mp, size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void *
|
||||||
|
nxt_mp_get_small(nxt_mp_t *mp, nxt_queue_t *pages, size_t size)
|
||||||
|
{
|
||||||
|
u_char *p;
|
||||||
|
uint32_t available;
|
||||||
|
nxt_mp_page_t *page;
|
||||||
|
nxt_queue_link_t *link, *next;
|
||||||
|
|
||||||
|
for (link = nxt_queue_first(pages);
|
||||||
|
link != nxt_queue_tail(pages);
|
||||||
|
link = next)
|
||||||
|
{
|
||||||
|
next = nxt_queue_next(link);
|
||||||
|
page = nxt_queue_link_data(link, nxt_mp_page_t, link);
|
||||||
|
|
||||||
|
available = mp->page_size - page->u.taken;
|
||||||
|
|
||||||
|
if (size <= available) {
|
||||||
|
goto found;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (available == 0 || page->fails++ > 100) {
|
||||||
|
nxt_queue_remove(link);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
page = nxt_mp_alloc_page(mp);
|
||||||
|
|
||||||
|
if (nxt_slow_path(page == NULL)) {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
nxt_queue_insert_head(pages, &page->link);
|
||||||
|
|
||||||
|
page->size = 0xFF;
|
||||||
|
|
||||||
|
found:
|
||||||
|
|
||||||
|
p = nxt_mp_page_addr(mp, page);
|
||||||
|
|
||||||
|
p += page->u.taken;
|
||||||
|
page->u.taken += size;
|
||||||
|
|
||||||
|
nxt_debug_alloc("mp get: %p", p);
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static nxt_mp_page_t *
|
static nxt_mp_page_t *
|
||||||
nxt_mp_alloc_page(nxt_mp_t *mp)
|
nxt_mp_alloc_page(nxt_mp_t *mp)
|
||||||
{
|
{
|
||||||
@@ -841,52 +890,3 @@ nxt_mp_zget(nxt_mp_t *mp, size_t size)
|
|||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *
|
|
||||||
nxt_mp_get_small(nxt_mp_t *mp, nxt_queue_t *pages, size_t size)
|
|
||||||
{
|
|
||||||
u_char *p;
|
|
||||||
uint32_t available;
|
|
||||||
nxt_mp_page_t *page;
|
|
||||||
nxt_queue_link_t *link, *next;
|
|
||||||
|
|
||||||
for (link = nxt_queue_first(pages);
|
|
||||||
link != nxt_queue_tail(pages);
|
|
||||||
link = next)
|
|
||||||
{
|
|
||||||
next = nxt_queue_next(link);
|
|
||||||
page = nxt_queue_link_data(link, nxt_mp_page_t, link);
|
|
||||||
|
|
||||||
available = mp->page_size - page->u.taken;
|
|
||||||
|
|
||||||
if (size <= available) {
|
|
||||||
goto found;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (available == 0 || page->fails++ > 100) {
|
|
||||||
nxt_queue_remove(link);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
page = nxt_mp_alloc_page(mp);
|
|
||||||
|
|
||||||
if (nxt_slow_path(page == NULL)) {
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
|
|
||||||
nxt_queue_insert_head(pages, &page->link);
|
|
||||||
|
|
||||||
page->size = 0xFF;
|
|
||||||
|
|
||||||
found:
|
|
||||||
|
|
||||||
p = nxt_mp_page_addr(mp, page);
|
|
||||||
|
|
||||||
p += page->u.taken;
|
|
||||||
page->u.taken += size;
|
|
||||||
|
|
||||||
nxt_debug_alloc("mp get: %p", p);
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user