diff --git a/src/gc.c b/src/gc.c index dba151d13b607..6da1635d89eed 100644 --- a/src/gc.c +++ b/src/gc.c @@ -846,11 +846,8 @@ static inline int gc_debug_check_other() return gc_debug_alloc_check(&gc_debug_env.other); } -static inline void gc_debug_print() +void gc_debug_print_status() { - gc_debug_init(); - if (!gc_debug_alloc_check(&gc_debug_env.print)) - return; uint64_t pool_count = gc_debug_env.pool.num; uint64_t other_count = gc_debug_env.other.num; jl_printf(JL_STDOUT, @@ -860,6 +857,14 @@ static inline void gc_debug_print() n_pause); } +static inline void gc_debug_print() +{ + gc_debug_init(); + if (!gc_debug_alloc_check(&gc_debug_env.print)) + return; + gc_debug_print_status(); +} + #else static inline int gc_debug_check_other() diff --git a/src/init.c b/src/init.c index bd4a2b9d6ba04..0e06ee170a252 100644 --- a/src/init.c +++ b/src/init.c @@ -221,6 +221,7 @@ void __cdecl crt_sig_handler(int sig, int num) ios_printf(ios_stderr,"\nsignal (%d): %s\n", sig, strsignal(sig)); bt_size = rec_backtrace(bt_data, MAX_BT_SIZE); jlbacktrace(); + gc_debug_print_status(); raise(sig); } } @@ -269,6 +270,7 @@ void sigdie_handler(int sig, siginfo_t *info, void *context) bt_size = rec_backtrace_ctx(bt_data, MAX_BT_SIZE, (ucontext_t*)context); #endif jlbacktrace(); + gc_debug_print_status(); if (sig != SIGSEGV && sig != SIGBUS && sig != SIGILL && diff --git a/src/julia_internal.h b/src/julia_internal.h index 09a2e675344d4..7175f37b44e21 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -44,6 +44,11 @@ STATIC_INLINE jl_value_t *newstruct(jl_datatype_t *type) // empty structs are a GNU extension #define sizeof_jl_taggedvalue_t (sizeof(void*)) +#ifdef GC_DEBUG_ENV +void gc_debug_print_status(); +#else +#define gc_debug_print_status() +#endif int jl_assign_type_uid(void); jl_value_t *jl_cache_type_(jl_datatype_t *type); int jl_get_t_uid_ctr(void);