diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2022-01-16 01:02:47 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2022-01-16 01:02:47 +0300 |
commit | e2451af1c6658ac7c68bf01d15daf13bfd79cf76 (patch) | |
tree | 77e3cb9d237572d6ed8152b16221a5c911eaebe6 /finalize.c | |
parent | 340ff2d4a174ae4797b145d5f6f268f4c7f32689 (diff) | |
download | bdwgc-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.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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; |