summaryrefslogtreecommitdiff
path: root/finalize.c
diff options
context:
space:
mode:
Diffstat (limited to 'finalize.c')
-rw-r--r--finalize.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/finalize.c b/finalize.c
index 1dac0ec9..0a4353d0 100644
--- a/finalize.c
+++ b/finalize.c
@@ -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) {