From f8d80d62a8765c54aaa9433148fd112f7c794734 Mon Sep 17 00:00:00 2001 From: Jason Evans Date: Tue, 8 Mar 2016 13:43:47 -0800 Subject: [PATCH] Refactor ph_merge_ordered() out of ph_merge(). --- include/jemalloc/internal/ph.h | 39 +++++++++++-------- include/jemalloc/internal/private_symbols.txt | 1 + 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/include/jemalloc/internal/ph.h b/include/jemalloc/internal/ph.h index aeca693e..519f0dda 100644 --- a/include/jemalloc/internal/ph.h +++ b/include/jemalloc/internal/ph.h @@ -49,6 +49,7 @@ struct ph_heap_s { #ifdef JEMALLOC_H_INLINES #ifndef JEMALLOC_ENABLE_INLINE +ph_node_t *ph_merge_ordered(ph_node_t *heap1, ph_node_t *heap2); ph_node_t *ph_merge(ph_node_t *heap1, ph_node_t *heap2); ph_node_t *ph_merge_pairs(ph_node_t *subheaps); void ph_merge_aux_list(ph_heap_t *l); @@ -63,6 +64,23 @@ void ph_remove(ph_heap_t *l, ph_node_t *n); /* Helper routines ************************************************************/ +JEMALLOC_INLINE ph_node_t * +ph_merge_ordered(ph_node_t *heap1, ph_node_t *heap2) +{ + + assert(heap1 != NULL); + assert(heap2 != NULL); + assert ((uintptr_t)heap1 <= (uintptr_t)heap2); + + heap2->parent = heap1; + heap2->prev = NULL; + heap2->next = heap1->subheaps; + if (heap1->subheaps != NULL) + heap1->subheaps->prev = heap2; + heap1->subheaps = heap2; + return (heap1); +} + JEMALLOC_INLINE ph_node_t * ph_merge(ph_node_t *heap1, ph_node_t *heap2) { @@ -72,23 +90,10 @@ ph_merge(ph_node_t *heap1, ph_node_t *heap2) if (heap2 == NULL) return (heap1); /* Optional: user-settable comparison function */ - if ((uintptr_t)heap1 < (uintptr_t)heap2) { - heap2->parent = heap1; - heap2->prev = NULL; - heap2->next = heap1->subheaps; - if (heap1->subheaps != NULL) - heap1->subheaps->prev = heap2; - heap1->subheaps = heap2; - return (heap1); - } else { - heap1->parent = heap2; - heap1->prev = NULL; - heap1->next = heap2->subheaps; - if (heap2->subheaps != NULL) - heap2->subheaps->prev = heap1; - heap2->subheaps = heap1; - return (heap2); - } + if ((uintptr_t)heap1 < (uintptr_t)heap2) + return (ph_merge_ordered(heap1, heap2)); + else + return (ph_merge_ordered(heap2, heap1)); } JEMALLOC_INLINE ph_node_t * diff --git a/include/jemalloc/internal/private_symbols.txt b/include/jemalloc/internal/private_symbols.txt index 2de1d5f3..aeb43b1d 100644 --- a/include/jemalloc/internal/private_symbols.txt +++ b/include/jemalloc/internal/private_symbols.txt @@ -383,6 +383,7 @@ ph_first ph_insert ph_merge ph_merge_aux_list +ph_merge_ordered ph_merge_pairs ph_new ph_remove_first