ocaml / ocaml

The core OCaml system: compilers, runtime system, base libraries
https://ocaml.org
Other
5.37k stars 1.09k forks source link

TSan reports a data race between marking and caml_stat_alloc #13214

Open OlivierNicole opened 2 months ago

OlivierNicole commented 2 months ago

From the TSan CI:

Commandline: /home/barsac/ci/builds/workspace/sanitizers/testsuite/tests/gc-roots/_ocamltest/tests/gc-roots/globroots_parallel/ocamlopt.byte/globroots_parallel.opt
  Redirecting stdout to /home/barsac/ci/builds/workspace/sanitizers/testsuite/tests/gc-roots/_ocamltest/tests/gc-roots/globroots_parallel/ocamlopt.byte/globroots_parallel.opt.output 
  Redirecting stderr to /home/barsac/ci/builds/workspace/sanitizers/testsuite/tests/gc-roots/_ocamltest/tests/gc-roots/globroots_parallel/ocamlopt.byte/globroots_parallel.opt.output 
### begin stdout ###
==================
WARNING: ThreadSanitizer: data race (pid=1289171)
  Atomic read of size 8 at 0x7b0400041e50 by thread T6 (mutexes: write M0, write M1):
    #0 Hd_val /home/barsac/ci/builds/workspace/sanitizers/./runtime/caml/mlvalues.h:160:10 (globroots_parallel.opt+0x1bf01b) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #1 do_some_marking /home/barsac/ci/builds/workspace/sanitizers/runtime/major_gc.c:1025:21 (globroots_parallel.opt+0x1bf01b)
    #2 mark /home/barsac/ci/builds/workspace/sanitizers/runtime/major_gc.c:1155:14 (globroots_parallel.opt+0x1bc807) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #3 caml_empty_mark_stack /home/barsac/ci/builds/workspace/sanitizers/runtime/major_gc.c:2005:5 (globroots_parallel.opt+0x1bceaf) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #4 caml_finish_marking /home/barsac/ci/builds/workspace/sanitizers/runtime/major_gc.c:2019:5 (globroots_parallel.opt+0x1bceaf)
    #5 domain_terminate /home/barsac/ci/builds/workspace/sanitizers/runtime/domain.c:1891:5 (globroots_parallel.opt+0x19aae6) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #6 domain_thread_func /home/barsac/ci/builds/workspace/sanitizers/runtime/domain.c:1212:5 (globroots_parallel.opt+0x19aae6)

  Previous write of size 8 at 0x7b0400041e50 by main thread (mutexes: write M2):
    #0 malloc <null> (globroots_parallel.opt+0xa0ff1) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #1 caml_stat_alloc_noexc /home/barsac/ci/builds/workspace/sanitizers/runtime/memory.c:587:12 (globroots_parallel.opt+0x1c18ce) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #2 caml_stat_alloc /home/barsac/ci/builds/workspace/sanitizers/runtime/memory.c:641:18 (globroots_parallel.opt+0x1c1a08) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #3 gb_generational_register <null> (globroots_parallel.opt+0x18914b) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #4 caml_c_call <null> (globroots_parallel.opt+0x1e1b67) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #5 camlGlobroots.fun_687 <null> (globroots_parallel.opt+0x124184) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #6 camlGlobroots.change_570 <null> (globroots_parallel.opt+0x124d88) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #7 camlGlobroots.test_602 <null> (globroots_parallel.opt+0x124ec9) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #8 camlGlobroots_parallel.entry <null> (globroots_parallel.opt+0x123f1f) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #9 caml_program <null> (globroots_parallel.opt+0x121719) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #10 caml_start_program <null> (globroots_parallel.opt+0x1e1c83) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #11 caml_startup_common /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:128:9 (globroots_parallel.opt+0x1e1418) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #12 caml_startup_exn /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:135:10 (globroots_parallel.opt+0x1e14c7) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #13 caml_startup /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:140:15 (globroots_parallel.opt+0x1e14c7)
    #14 caml_main /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:147:3 (globroots_parallel.opt+0x1e14c7)
    #15 main /home/barsac/ci/builds/workspace/sanitizers/runtime/main.c:37:3 (globroots_parallel.opt+0x1b9e45) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)

  Location is heap block of size 16 at 0x7b0400041e50 allocated by main thread:
    #0 malloc <null> (globroots_parallel.opt+0xa0ff1) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #1 caml_stat_alloc_noexc /home/barsac/ci/builds/workspace/sanitizers/runtime/memory.c:587:12 (globroots_parallel.opt+0x1c18ce) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #2 caml_stat_alloc /home/barsac/ci/builds/workspace/sanitizers/runtime/memory.c:641:18 (globroots_parallel.opt+0x1c1a08) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #3 gb_generational_register <null> (globroots_parallel.opt+0x18914b) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #4 caml_c_call <null> (globroots_parallel.opt+0x1e1b67) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #5 camlGlobroots.fun_687 <null> (globroots_parallel.opt+0x124184) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #6 camlGlobroots.change_570 <null> (globroots_parallel.opt+0x124d88) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #7 camlGlobroots.test_602 <null> (globroots_parallel.opt+0x124ec9) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #8 camlGlobroots_parallel.entry <null> (globroots_parallel.opt+0x123f1f) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #9 caml_program <null> (globroots_parallel.opt+0x121719) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #10 caml_start_program <null> (globroots_parallel.opt+0x1e1c83) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #11 caml_startup_common /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:128:9 (globroots_parallel.opt+0x1e1418) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #12 caml_startup_exn /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:135:10 (globroots_parallel.opt+0x1e14c7) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #13 caml_startup /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:140:15 (globroots_parallel.opt+0x1e14c7)
    #14 caml_main /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:147:3 (globroots_parallel.opt+0x1e14c7)
    #15 main /home/barsac/ci/builds/workspace/sanitizers/runtime/main.c:37:3 (globroots_parallel.opt+0x1b9e45) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)

  Mutex M0 (0x55e5627fc3d8) created at:
    #0 pthread_mutex_init <null> (globroots_parallel.opt+0xa3faf) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #1 caml_plat_mutex_init /home/barsac/ci/builds/workspace/sanitizers/runtime/platform.c:59:8 (globroots_parallel.opt+0x1ccaf6) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #2 caml_init_domains /home/barsac/ci/builds/workspace/sanitizers/runtime/domain.c:935:5 (globroots_parallel.opt+0x1999d6) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #3 caml_init_gc /home/barsac/ci/builds/workspace/sanitizers/runtime/gc_ctrl.c:350:3 (globroots_parallel.opt+0x1ab7a6) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #4 caml_startup_common /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:107:3 (globroots_parallel.opt+0x1e12ee) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #5 caml_startup_exn /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:135:10 (globroots_parallel.opt+0x1e14c7) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #6 caml_startup /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:140:15 (globroots_parallel.opt+0x1e14c7)
    #7 caml_main /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:147:3 (globroots_parallel.opt+0x1e14c7)
    #8 main /home/barsac/ci/builds/workspace/sanitizers/runtime/main.c:37:3 (globroots_parallel.opt+0x1b9e45) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)

  Mutex M1 (0x7b0c000019e0) created at:
    #0 pthread_mutex_init <null> (globroots_parallel.opt+0xa3faf) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #1 sync_mutex_create /home/barsac/ci/builds/workspace/sanitizers/./runtime/sync_posix.h:44:8 (globroots_parallel.opt+0x1d8880) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #2 caml_ml_mutex_new /home/barsac/ci/builds/workspace/sanitizers/runtime/sync.c:77:20 (globroots_parallel.opt+0x1d8880)
    #3 caml_c_call <null> (globroots_parallel.opt+0x1e1b67) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #4 camlStdlib__Domain.spawn_736 <null> (globroots_parallel.opt+0x15b012) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #5 camlStdlib__Array.init_291 <null> (globroots_parallel.opt+0x14c062) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #6 camlGlobroots_parallel.entry <null> (globroots_parallel.opt+0x123e6b) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #7 caml_program <null> (globroots_parallel.opt+0x121719) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #8 caml_start_program <null> (globroots_parallel.opt+0x1e1c83) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #9 caml_startup_common /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:128:9 (globroots_parallel.opt+0x1e1418) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #10 caml_startup_exn /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:135:10 (globroots_parallel.opt+0x1e14c7) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #11 caml_startup /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:140:15 (globroots_parallel.opt+0x1e14c7)
    #12 caml_main /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:147:3 (globroots_parallel.opt+0x1e14c7)
    #13 main /home/barsac/ci/builds/workspace/sanitizers/runtime/main.c:37:3 (globroots_parallel.opt+0x1b9e45) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)

  Mutex M2 (0x55e5627fc0c0) created at:
    #0 pthread_mutex_init <null> (globroots_parallel.opt+0xa3faf) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #1 caml_plat_mutex_init /home/barsac/ci/builds/workspace/sanitizers/runtime/platform.c:59:8 (globroots_parallel.opt+0x1ccaf6) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #2 caml_init_domains /home/barsac/ci/builds/workspace/sanitizers/runtime/domain.c:935:5 (globroots_parallel.opt+0x1999d6) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #3 caml_init_gc /home/barsac/ci/builds/workspace/sanitizers/runtime/gc_ctrl.c:350:3 (globroots_parallel.opt+0x1ab7a6) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #4 caml_startup_common /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:107:3 (globroots_parallel.opt+0x1e12ee) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #5 caml_startup_exn /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:135:10 (globroots_parallel.opt+0x1e14c7) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #6 caml_startup /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:140:15 (globroots_parallel.opt+0x1e14c7)
    #7 caml_main /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:147:3 (globroots_parallel.opt+0x1e14c7)
    #8 main /home/barsac/ci/builds/workspace/sanitizers/runtime/main.c:37:3 (globroots_parallel.opt+0x1b9e45) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)

  Thread T6 (tid=1289252, running) created by main thread at:
    #0 pthread_create <null> (globroots_parallel.opt+0xa27ad) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #1 caml_domain_spawn /home/barsac/ci/builds/workspace/sanitizers/runtime/domain.c:1257:9 (globroots_parallel.opt+0x19a3db) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #2 caml_c_call <null> (globroots_parallel.opt+0x1e1b67) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #3 camlStdlib__Domain.spawn_736 <null> (globroots_parallel.opt+0x15b096) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #4 camlStdlib__Array.init_291 <null> (globroots_parallel.opt+0x14c062) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #5 camlGlobroots_parallel.entry <null> (globroots_parallel.opt+0x123e6b) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #6 caml_program <null> (globroots_parallel.opt+0x121719) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #7 caml_start_program <null> (globroots_parallel.opt+0x1e1c83) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #8 caml_startup_common /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:128:9 (globroots_parallel.opt+0x1e1418) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #9 caml_startup_exn /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:135:10 (globroots_parallel.opt+0x1e14c7) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)
    #10 caml_startup /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:140:15 (globroots_parallel.opt+0x1e14c7)
    #11 caml_main /home/barsac/ci/builds/workspace/sanitizers/runtime/startup_nat.c:147:3 (globroots_parallel.opt+0x1e14c7)
    #12 main /home/barsac/ci/builds/workspace/sanitizers/runtime/main.c:37:3 (globroots_parallel.opt+0x1b9e45) (BuildId: 4ae56ac3d2fe7e53748ead3a1c89faa8eb566ae5)

SUMMARY: ThreadSanitizer: data race /home/barsac/ci/builds/workspace/sanitizers/./runtime/caml/mlvalues.h:160:10 in Hd_val
==================
ok
ThreadSanitizer: reported 1 warnings
### end stdout ###
Action 4/8 (run) => failed (Running program /home/barsac/ci/builds/workspace/sanitizers/testsuite/tests/gc-roots/_ocamltest/tests/gc-roots/globroots_parallel/ocamlopt.byte/globroots_parallel.opt without any argument: command
/home/barsac/ci/builds/workspace/sanitizers/testsuite/tests/gc-roots/_ocamltest/tests/gc-roots/globroots_parallel/ocamlopt.byte/globroots_parallel.opt 
failed with exit code 66)

This may be another #12894, I hope to look into it in the near future.

OlivierNicole commented 2 months ago

(cc @fabbing)