STATIC void GC_do_nothing(void) {}
#endif
-STATIC void GC_start_debugging_inner(void)
+GC_INNER void GC_start_debugging_inner(void)
{
GC_ASSERT(I_HOLD_LOCK());
# ifndef SHORT_DBG_HDRS
GC_register_displacement_inner((word)sizeof(oh));
}
-GC_INNER void GC_start_debugging(void)
-{
- DCL_LOCK_STATE;
+#ifdef THREADS
+ STATIC void GC_start_debugging(void)
+ {
+ DCL_LOCK_STATE;
- LOCK();
- GC_start_debugging_inner();
- UNLOCK();
-}
+ LOCK();
+ if (!GC_debugging_started)
+ GC_start_debugging_inner();
+ UNLOCK();
+ }
+#else
+# define GC_start_debugging GC_start_debugging_inner
+#endif /* !THREADS */
size_t GC_debug_header_size = sizeof(oh);
return((*oom_fn)(lb));
}
*((void **)((ptr_t)result + sizeof(oh))) = ptr_to_struct_containing_descr;
- UNLOCK();
if (!GC_debugging_started) {
- GC_start_debugging();
+ GC_start_debugging_inner();
}
+ UNLOCK();
ADD_CALL_CHAIN(result, ra);
return (GC_store_debug_info(result, (word)lb, s, i));
}
GC_INNER void GC_bl_init(void);
GC_INNER void GC_bl_init_no_interiors(void); /* defined in blacklst.c */
-GC_INNER void GC_start_debugging(void); /* defined in dbg_mlc.c */
+GC_INNER void GC_start_debugging_inner(void); /* defined in dbg_mlc.c. */
+ /* Should not be called if GC_debugging_started. */
/* Store debugging info into p. Return displaced pointer. */
/* Assumes we don't hold allocation lock. */