mirror of
https://github.com/encounter/bdwgc.git
synced 2026-03-30 10:57:55 -07:00
Fix 'collecting from unknown thread' abort in leak-finding mode
* include/private/gc_priv.h [GC_PTHREADS && !GC_WIN32_THREADS] (GC_in_thread_creation): Move variable declaration from pthread_support.h. * misc.c [!DONT_USE_ATEXIT && GC_PTHREADS && !GC_WIN32_THREADS] (GC_exit_check): Set GC_in_thread_creation to TRUE before GC_gcollect call.
This commit is contained in:
@@ -1951,6 +1951,13 @@ GC_INNER GC_bool GC_try_to_collect_inner(GC_stop_func f);
|
||||
#define GC_gcollect_inner() \
|
||||
(void)GC_try_to_collect_inner(GC_never_stop_func)
|
||||
|
||||
#if defined(GC_PTHREADS) && !defined(GC_WIN32_THREADS)
|
||||
GC_EXTERN GC_bool GC_in_thread_creation;
|
||||
/* We may currently be in thread creation or destruction. */
|
||||
/* Only set to TRUE while allocation lock is held. */
|
||||
/* When set, it is OK to run GC from unknown thread. */
|
||||
#endif
|
||||
|
||||
GC_EXTERN GC_bool GC_is_initialized; /* GC_init() has been run. */
|
||||
|
||||
GC_INNER void GC_collect_a_little_inner(int n);
|
||||
|
||||
@@ -158,11 +158,6 @@ GC_EXTERN GC_bool GC_thr_initialized;
|
||||
|
||||
GC_INNER GC_thread GC_lookup_thread(pthread_t id);
|
||||
|
||||
GC_EXTERN GC_bool GC_in_thread_creation;
|
||||
/* We may currently be in thread creation or destruction. */
|
||||
/* Only set to TRUE while allocation lock is held. */
|
||||
/* When set, it is OK to run GC from unknown thread. */
|
||||
|
||||
#ifdef NACL
|
||||
GC_EXTERN __thread GC_thread GC_nacl_gc_thread_self;
|
||||
GC_INNER void GC_nacl_initialize_gc_thread(void);
|
||||
|
||||
@@ -760,7 +760,13 @@ GC_API int GC_CALL GC_is_init_called(void)
|
||||
STATIC void GC_exit_check(void)
|
||||
{
|
||||
if (GC_find_leak && !skip_gc_atexit) {
|
||||
GC_gcollect();
|
||||
# if defined(GC_PTHREADS) && !defined(GC_WIN32_THREADS)
|
||||
GC_in_thread_creation = TRUE; /* OK to collect from unknown thread. */
|
||||
GC_gcollect();
|
||||
GC_in_thread_creation = FALSE;
|
||||
# else
|
||||
GC_gcollect();
|
||||
# endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user