Skip to content

Commit 68fc828

Browse files
committed
Fix GCExt test with resizable threadpool
1 parent 5eb6195 commit 68fc828

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
@@ -4110,7 +4110,7 @@ JL_DLLEXPORT int jl_gc_conservative_gc_support_enabled(void)
41104110
return jl_atomic_load(&support_conservative_marking);
41114111
}
41124112

4113-
JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
4113+
static inline jl_value_t *internal_obj_base_ptr(void *p)
41144114
{
41154115
p = (char *) p - 1;
41164116
jl_gc_pagemeta_t *meta = page_metadata(p);
@@ -4203,6 +4203,21 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
42034203
return NULL;
42044204
}
42054205

4206+
JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
4207+
{
4208+
uint8_t restore = gc_all_tls_states == NULL;
4209+
if (__unlikely(restore)) {
4210+
gc_n_threads = jl_atomic_load_acquire(&jl_n_threads);
4211+
gc_all_tls_states = jl_atomic_load_relaxed(&jl_all_tls_states);
4212+
}
4213+
jl_value_t *obj = internal_obj_base_ptr(p);
4214+
if (__unlikely(restore)) {
4215+
gc_n_threads = 0;
4216+
gc_all_tls_states = NULL;
4217+
}
4218+
return obj;
4219+
}
4220+
42064221
JL_DLLEXPORT size_t jl_gc_max_internal_obj_size(void)
42074222
{
42084223
return GC_MAX_SZCLASS;

0 commit comments

Comments
 (0)