diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2022-12-30 07:41:59 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2022-12-30 10:42:41 +0300 |
commit | eefacb753ae1f4dd8f6e0fe007335553d4a2019e (patch) | |
tree | 050054437f66063cd5ce3bd590fc2258272aa07e /finalize.c | |
parent | b528d5760e1e05c51b341741833a3caba34ea20a (diff) | |
download | bdwgc-eefacb753ae1f4dd8f6e0fe007335553d4a2019e.tar.gz |
Do not invoke finalizers during thread creation or destruction
* finalize.c [THREADS] (GC_notify_or_invoke_finalizers): Do not call
GC_check_finalizer_nested() and GC_invoke_finalizers() if
GC_in_thread_creation.
Diffstat (limited to 'finalize.c')
-rw-r--r-- | finalize.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -1349,7 +1349,15 @@ GC_INNER void GC_notify_or_invoke_finalizers(void) } if (!GC_finalize_on_demand) { - unsigned char *pnested = GC_check_finalizer_nested(); + unsigned char *pnested; + +# ifdef THREADS + if (EXPECT(GC_in_thread_creation, FALSE)) { + UNLOCK(); + return; + } +# endif + pnested = GC_check_finalizer_nested(); UNLOCK(); /* Skip GC_invoke_finalizers() if nested */ if (pnested != NULL) { |