summaryrefslogtreecommitdiff
path: root/finalize.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2022-01-16 01:02:47 +0300
committerIvan Maidanski <ivmai@mail.ru>2022-01-16 01:02:47 +0300
commite2451af1c6658ac7c68bf01d15daf13bfd79cf76 (patch)
tree77e3cb9d237572d6ed8152b16221a5c911eaebe6 /finalize.c
parent340ff2d4a174ae4797b145d5f6f268f4c7f32689 (diff)
downloadbdwgc-e2451af1c6658ac7c68bf01d15daf13bfd79cf76.tar.gz
Fix missing lock when GC_generate_random_valid_address is called
Issue #414 (bdwgc). * dbg_mlc.c [KEEP_BACK_PTRS] (GC_generate_random_backtrace_no_gc): Remove definition. * dbg_mlc.c [KEEP_BACK_PTRS] (GC_generate_random_backtrace): Declare current local variable; expand GC_generate_random_backtrace_no_gc() manually. * finalize.c [KEEP_BACK_PTRS] (GC_notify_or_invoke_finalizers): Likewise. * dbg_mlc.c [KEEP_BACK_PTRS] (GC_generate_random_backtrace): Wrap GC_generate_random_valid_address() call into LOCK/UNLOCK. * finalize.c [KEEP_BACK_PTRS] (GC_notify_or_invoke_finalizers): UNLOCK after GC_generate_random_valid_address() call. * include/private/gc_priv.h [KEEP_BACK_PTRS] (GC_generate_random_backtrace_no_gc): Remove declaration.
Diffstat (limited to 'finalize.c')
-rw-r--r--finalize.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/finalize.c b/finalize.c
index 53b1beb6..65ee2701 100644
--- a/finalize.c
+++ b/finalize.c
@@ -1303,8 +1303,11 @@ GC_INNER void GC_notify_or_invoke_finalizers(void)
/* which may cause occasional mysterious results. */
/* We need to release the GC lock, since GC_print_callers */
/* acquires it. It probably shouldn't. */
+ void *current = GC_generate_random_valid_address();
+
UNLOCK();
- GC_generate_random_backtrace_no_gc();
+ GC_printf("\n****Chosen address %p in object\n", current);
+ GC_print_backtrace(current);
LOCK();
}
last_back_trace_gc_no = GC_gc_no;