diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2020-06-21 13:24:57 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2020-06-21 13:24:57 +0300 |
commit | e7819c6dee3e15447dce87104a6301266b4c9ad1 (patch) | |
tree | 82ac5a48b664ec30a716e7e3d0e897718c9f0ce6 /finalize.c | |
parent | 758feb841867c6d76eadf588d32c102e2a5f096b (diff) | |
download | bdwgc-e7819c6dee3e15447dce87104a6301266b4c9ad1.tar.gz |
Change type of toggleref_array_size/capacity to size_t
(code refactoring)
* finalize.c (GC_push_finalizer_structures): Add comment about
GC_toggleref_arr.
* finalize.c [!GC_TOGGLE_REFS_NOT_NEEDED] (GC_toggleref_array_size,
GC_toggleref_array_capacity): Change type from int to size_t.
* finalize.c [!GC_TOGGLE_REFS_NOT_NEEDED] (GC_process_togglerefs,
GC_mark_togglerefs, GC_clear_togglerefs): Change type of i and new_size
local variables from int to size_t.
* finalize.c [!GC_TOGGLE_REFS_NOT_NEEDED] (ensure_toggleref_capacity):
Change capacity_inc argument type from int to size_t; remove assertion
for capacity_inc; remove casts to unsigned; assume overflow of
GC_toggleref_array_capacity if the high bit is set.
Diffstat (limited to 'finalize.c')
-rw-r--r-- | finalize.c | 29 |
1 files changed, 15 insertions, 14 deletions
@@ -97,6 +97,7 @@ GC_API void GC_CALL GC_push_finalizer_structures(void) # endif GC_PUSH_ALL_SYM(GC_dl_hashtbl.head); GC_PUSH_ALL_SYM(GC_fnlz_roots); + /* GC_toggleref_arr is pushed specially by GC_mark_togglerefs. */ } /* Threshold of log_size to initiate full collection before growing */ @@ -315,13 +316,13 @@ GC_API int GC_CALL GC_unregister_disappearing_link(void * * link) STATIC GC_toggleref_func GC_toggleref_callback = 0; STATIC GCToggleRef *GC_toggleref_arr = NULL; - STATIC int GC_toggleref_array_size = 0; - STATIC int GC_toggleref_array_capacity = 0; + STATIC size_t GC_toggleref_array_size = 0; + STATIC size_t GC_toggleref_array_capacity = 0; GC_INNER void GC_process_togglerefs(void) { - int i; - int new_size = 0; + size_t i; + size_t new_size = 0; GC_bool needs_barrier = FALSE; GC_ASSERT(I_HOLD_LOCK()); @@ -377,7 +378,7 @@ GC_API int GC_CALL GC_unregister_disappearing_link(void * * link) STATIC void GC_mark_togglerefs(void) { - int i; + size_t i; if (NULL == GC_toggleref_arr) return; @@ -393,7 +394,7 @@ GC_API int GC_CALL GC_unregister_disappearing_link(void * * link) STATIC void GC_clear_togglerefs(void) { - int i; + size_t i; for (i = 0; i < GC_toggleref_array_size; ++i) { if ((GC_toggleref_arr[i].weak_ref & 1) != 0) { if (!GC_is_marked(GC_REVEAL_POINTER(GC_toggleref_arr[i].weak_ref))) { @@ -425,9 +426,8 @@ GC_API int GC_CALL GC_unregister_disappearing_link(void * * link) return fn; } - static GC_bool ensure_toggleref_capacity(int capacity_inc) + static GC_bool ensure_toggleref_capacity(size_t capacity_inc) { - GC_ASSERT(capacity_inc >= 0); GC_ASSERT(I_HOLD_LOCK()); if (NULL == GC_toggleref_arr) { GC_toggleref_array_capacity = 32; /* initial capacity */ @@ -437,14 +437,15 @@ GC_API int GC_CALL GC_unregister_disappearing_link(void * * link) if (NULL == GC_toggleref_arr) return FALSE; } - if ((unsigned)GC_toggleref_array_size + (unsigned)capacity_inc - >= (unsigned)GC_toggleref_array_capacity) { + if (GC_toggleref_array_size + capacity_inc + >= GC_toggleref_array_capacity) { GCToggleRef *new_array; - while ((unsigned)GC_toggleref_array_capacity - < (unsigned)GC_toggleref_array_size + (unsigned)capacity_inc) { + while (GC_toggleref_array_capacity + < GC_toggleref_array_size + capacity_inc) { GC_toggleref_array_capacity *= 2; - if (GC_toggleref_array_capacity < 0) /* overflow */ - return FALSE; + if ((GC_toggleref_array_capacity + & ((size_t)1 << (sizeof(size_t) * 8 - 1))) != 0) + return FALSE; /* overflow */ } new_array = (GCToggleRef *)GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE( |