Skip to content

Commit 7ecefe2

Browse files
committed
Fix GCExt test with resizable threadpool
1 parent d0a211a commit 7ecefe2

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

src/gc.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4113,7 +4113,7 @@ JL_DLLEXPORT int jl_gc_conservative_gc_support_enabled(void)
41134113
return jl_atomic_load(&support_conservative_marking);
41144114
}
41154115

4116-
JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
4116+
static inline jl_value_t *internal_obj_base_ptr(void *p)
41174117
{
41184118
p = (char *) p - 1;
41194119
jl_gc_pagemeta_t *meta = page_metadata(p);
@@ -4206,6 +4206,21 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
42064206
return NULL;
42074207
}
42084208

4209+
JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
4210+
{
4211+
uint8_t restore = gc_all_tls_states == NULL;
4212+
if (__unlikely(restore)) {
4213+
gc_n_threads = jl_atomic_load_acquire(&jl_n_threads);
4214+
gc_all_tls_states = jl_atomic_load_relaxed(&jl_all_tls_states);
4215+
}
4216+
jl_value_t *obj = internal_obj_base_ptr(p);
4217+
if (__unlikely(restore)) {
4218+
gc_n_threads = 0;
4219+
gc_all_tls_states = NULL;
4220+
}
4221+
return obj;
4222+
}
4223+
42094224
JL_DLLEXPORT size_t jl_gc_max_internal_obj_size(void)
42104225
{
42114226
return GC_MAX_SZCLASS;

0 commit comments

Comments
 (0)