summaryrefslogtreecommitdiff
path: root/finalize.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2018-03-21 10:26:10 +0300
committerIvan Maidanski <ivmai@mail.ru>2018-03-21 10:26:58 +0300
commit46e7ec21e3f8fb67abd8f3d582a32a9b8cdb6873 (patch)
tree5c6497c6f80b508626f1de2a30f48f1136d029d0 /finalize.c
parentb04b346006b34ec371fb8f002ba56522ee033131 (diff)
downloadbdwgc-46e7ec21e3f8fb67abd8f3d582a32a9b8cdb6873.tar.gz
Fix ASSERT_CANCEL_DISABLED violation in try_to_collect_inner
(fix of commit b04b346) Issue #182 (bdwgc). * finalize.c (GC_ON_GROW_LOG_SIZE_MIN): Define to CPP_LOG_HBLKSIZE value by default. * finalize.c (GC_grow_table): Surround GC_try_to_collect_inner call with DISABLE/RESTORE_CANCEL.
Diffstat (limited to 'finalize.c')
-rw-r--r--finalize.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/finalize.c b/finalize.c
index cbe00b82..8c4e3804 100644
--- a/finalize.c
+++ b/finalize.c
@@ -102,7 +102,7 @@ GC_API void GC_CALL GC_push_finalizer_structures(void)
/* Threshold of log_size to initiate full collection before growing */
/* a hash table. */
#ifndef GC_ON_GROW_LOG_SIZE_MIN
-# define GC_ON_GROW_LOG_SIZE_MIN 12
+# define GC_ON_GROW_LOG_SIZE_MIN CPP_LOG_HBLKSIZE
#endif
/* Double the size of a hash table. *log_size_ptr is the log of its */
@@ -125,7 +125,11 @@ STATIC void GC_grow_table(struct hash_chain_entry ***table,
/* Avoid growing the table in case of at least 25% of entries can */
/* be deleted by enforcing a collection. Ignored for small tables. */
if (log_old_size >= GC_ON_GROW_LOG_SIZE_MIN) {
+ IF_CANCEL(int cancel_state;)
+
+ DISABLE_CANCEL(cancel_state);
(void)GC_try_to_collect_inner(GC_never_stop_func);
+ RESTORE_CANCEL(cancel_state);
/* GC_finalize might decrease entries value. */
if (*entries_ptr < ((word)1 << log_old_size) - (*entries_ptr >> 2))
return;