summaryrefslogtreecommitdiff
path: root/finalize.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2020-06-21 13:24:57 +0300
committerIvan Maidanski <ivmai@mail.ru>2020-06-21 13:24:57 +0300
commite7819c6dee3e15447dce87104a6301266b4c9ad1 (patch)
tree82ac5a48b664ec30a716e7e3d0e897718c9f0ce6 /finalize.c
parent758feb841867c6d76eadf588d32c102e2a5f096b (diff)
downloadbdwgc-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.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/finalize.c b/finalize.c
index 2b62ab48..4bab8908 100644
--- a/finalize.c
+++ b/finalize.c
@@ -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(