summaryrefslogtreecommitdiff
path: root/malloc.c
diff options
context:
space:
mode:
authorAlessandro Bruni <alessandro.bruni@gmail.com>2016-01-05 10:51:52 +0300
committerIvan Maidanski <ivmai@mail.ru>2016-01-05 10:51:52 +0300
commit41871b970c8fd9704835c1a221a8f9f1deea707a (patch)
treed1e2fe604ec12921a6eb204fe2b9033fad7b0d8e /malloc.c
parent7fecb024d35db637937e6194c7e7255713be82b7 (diff)
downloadbdwgc-41871b970c8fd9704835c1a221a8f9f1deea707a.tar.gz
Refactoring of GC_Xobjfreelist
(use single array to keep free lists of all kinds) * alloc.c: Update comment (replace GC_objfreelist with GC_freelists[NORMAL]). * checksums.c (GC_on_free_list): Replace GC_sobjfreelist with GC_freelists[STUBBORN]. * mark.c (GC_obj_kinds): Likewise. * include/private/gc_priv.h (PTRFREE, NORMAL, UNCOLLECTABLE, AUNCOLLECTABLE, STUBBORN, IS_UNCOLLECTABLE): Move definition upper to be before _GC_arrays declaration. * include/private/gc_priv.h (PREDEFINED_KINDS): New macro. * include/private/gc_priv.h (GC_freelists): New macro (of global variable if SEPARATE_GLOBALS). * include/private/gc_priv.h (_GC_arrays): Replace _objfreelist, _aobjfreelist, _uobjfreelist, _auobjfreelist, _sobjfreelist fields with single _freelists[] field. * include/private/gc_priv.h (GC_objfreelist, GC_aobjfreelist, GC_auobjfreelist, GC_sobjfreelist, GC_uobjfreelist, beginGC_objfreelist, endGC_objfreelist, beginGC_aobjfreelist, endGC_aobjfreelist): Remove macro. * include/private/gc_priv.h (GC_objfreelist, GC_aobjfreelist): Replace variable declarations with single GC_freelists[] one (if SEPARATE_GLOBALS). * malloc.c (GC_malloc_atomic): Replace GC_aobjfreelist with GC_freelists[PTRFREE]. * mallocx.c (GC_aobjfreelist_ptr): Likewise. * mark.c (GC_obj_kinds): Likewise. * thread_local_alloc.c (GC_destroy_thread_local): Likewise. * malloc.c (GC_malloc): Replace GC_objfreelist with GC_freelists[NORMAL]. * mallocx.c (GC_objfreelist_ptr): Likewise. * mark.c (GC_obj_kinds): Likewise. * thread_local_alloc.c (GC_destroy_thread_local): Likewise. * malloc.c (GC_malloc_uncollectable): Replace GC_uobjfreelist with GC_freelists[UNCOLLECTABLE]. * mallocx.c (GC_uobjfreelist_ptr): Likewise. * mark.c (GC_obj_kinds): Likewise. * mallocx.c (GC_auobjfreelist_ptr, GC_malloc_atomic_uncollectable): Replace GC_auobjfreelist with GC_freelists[AUNCOLLECTABLE]. * mark.c (GC_obj_kinds): Likewise. * misc.c (GC_init): Exclude whole GC_freelists from scanning instead of beginGC_objfreelist and beginGC_aobjfreelist (if SEPARATE_GLOBALS).
Diffstat (limited to 'malloc.c')
-rw-r--r--malloc.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/malloc.c b/malloc.c
index 1627bdb5..0255d908 100644
--- a/malloc.c
+++ b/malloc.c
@@ -244,12 +244,12 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_generic_malloc(size_t lb, int k)
GC_DBG_COLLECT_AT_MALLOC(lb);
lg = GC_size_map[lb];
LOCK();
- op = GC_aobjfreelist[lg];
+ op = GC_freelists[PTRFREE][lg];
if (EXPECT(0 == op, FALSE)) {
UNLOCK();
return(GENERAL_MALLOC((word)lb, PTRFREE));
}
- GC_aobjfreelist[lg] = obj_link(op);
+ GC_freelists[PTRFREE][lg] = obj_link(op);
GC_bytes_allocd += GRANULES_TO_BYTES(lg);
UNLOCK();
return((void *) op);
@@ -273,7 +273,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_generic_malloc(size_t lb, int k)
GC_DBG_COLLECT_AT_MALLOC(lb);
lg = GC_size_map[lb];
LOCK();
- op = GC_objfreelist[lg];
+ op = GC_freelists[NORMAL][lg];
if (EXPECT(0 == op, FALSE)) {
UNLOCK();
return (GENERAL_MALLOC((word)lb, NORMAL));
@@ -283,7 +283,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_generic_malloc(size_t lb, int k)
<= (word)GC_greatest_plausible_heap_addr
&& (word)obj_link(op)
>= (word)GC_least_plausible_heap_addr));
- GC_objfreelist[lg] = obj_link(op);
+ GC_freelists[NORMAL][lg] = obj_link(op);
obj_link(op) = 0;
GC_bytes_allocd += GRANULES_TO_BYTES(lg);
UNLOCK();
@@ -307,9 +307,9 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_malloc_uncollectable(size_t lb)
/* collected anyway. */
lg = GC_size_map[lb];
LOCK();
- op = GC_uobjfreelist[lg];
+ op = GC_freelists[UNCOLLECTABLE][lg];
if (EXPECT(op != 0, TRUE)) {
- GC_uobjfreelist[lg] = obj_link(op);
+ GC_freelists[UNCOLLECTABLE][lg] = obj_link(op);
obj_link(op) = 0;
GC_bytes_allocd += GRANULES_TO_BYTES(lg);
/* Mark bit ws already set on free list. It will be */