Skip to content

Commit 97d507b

Browse files
authored
fix a couple static variable data-races (#59408)
I used clang-ast to get a list of all static variables in functions and checked each for possible data races and then had Claude fix them.
1 parent b22b629 commit 97d507b

File tree

4 files changed

+12
-12
lines changed

4 files changed

+12
-12
lines changed

src/gc-common.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,11 @@ JL_DLLEXPORT void jl_gc_enable_finalizers(jl_task_t *ct, int on)
367367
JL_CATCH {
368368
jl_printf((JL_STREAM*)STDERR_FILENO, "WARNING: GC finalizers already enabled on this thread.\n");
369369
// Only print the backtrace once, to avoid spamming the logs
370-
static int backtrace_printed = 0;
371-
if (backtrace_printed == 0) {
372-
backtrace_printed = 1;
373-
jlbacktrace(); // written to STDERR_FILENO
370+
static _Atomic(int) backtrace_printed = 0;
371+
if (jl_atomic_load_relaxed(&backtrace_printed) == 0) {
372+
if (jl_atomic_exchange_relaxed(&backtrace_printed, 1) == 0) {
373+
jlbacktrace(); // written to STDERR_FILENO
374+
}
374375
}
375376
}
376377
return;

src/jl_uv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -818,7 +818,7 @@ JL_DLLEXPORT int jl_printf(uv_stream_t *s, const char *format, ...)
818818

819819
JL_DLLEXPORT void jl_safe_printf(const char *fmt, ...)
820820
{
821-
static char buf[1000];
821+
char buf[1000];
822822
buf[0] = '\0';
823823
int last_errno = errno;
824824
#ifdef _OS_WINDOWS_

src/module.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,8 +1627,8 @@ JL_DLLEXPORT void jl_set_const(jl_module_t *m JL_ROOTING_ARGUMENT, jl_sym_t *var
16271627

16281628
void jl_invalidate_binding_refs(jl_globalref_t *ref, jl_binding_partition_t *invalidated_bpart, jl_binding_partition_t *new_bpart, size_t new_world)
16291629
{
1630-
static jl_value_t *invalidate_code_for_globalref = NULL;
1631-
if (invalidate_code_for_globalref == NULL && jl_base_module != NULL)
1630+
jl_value_t *invalidate_code_for_globalref = NULL;
1631+
if (jl_base_module != NULL)
16321632
invalidate_code_for_globalref = jl_get_global(jl_base_module, jl_symbol("invalidate_code_for_globalref!"));
16331633
if (!invalidate_code_for_globalref)
16341634
jl_error("Binding invalidation is not permitted during bootstrap.");

src/toplevel.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,9 @@ void jl_module_run_initializer(jl_module_t *m)
8383

8484
static void jl_register_root_module(jl_module_t *m)
8585
{
86-
static jl_value_t *register_module_func = NULL;
86+
jl_value_t *register_module_func = NULL;
8787
assert(jl_base_module);
88-
if (register_module_func == NULL)
89-
register_module_func = jl_get_global(jl_base_module, jl_symbol("register_root_module"));
88+
register_module_func = jl_get_global(jl_base_module, jl_symbol("register_root_module"));
9089
assert(register_module_func);
9190
jl_value_t *args[2];
9291
args[0] = register_module_func;
@@ -96,8 +95,8 @@ static void jl_register_root_module(jl_module_t *m)
9695

9796
jl_array_t *jl_get_loaded_modules(void)
9897
{
99-
static jl_value_t *loaded_modules_array = NULL;
100-
if (loaded_modules_array == NULL && jl_base_module != NULL)
98+
jl_value_t *loaded_modules_array = NULL;
99+
if (jl_base_module != NULL)
101100
loaded_modules_array = jl_get_global(jl_base_module, jl_symbol("loaded_modules_array"));
102101
if (loaded_modules_array != NULL)
103102
return (jl_array_t*)jl_call0((jl_value_t*)loaded_modules_array);

0 commit comments

Comments
 (0)