Skip to content

Commit ba15bac

Browse files
committed
fix(multicore): Domain.join: do not lose backtrace
When an exception from a joined domain is raised, the backtrace is lost. Instead, the backtrace the user gets indicates that it originated from Domain.join, as opposed to where the error occurred inside the domain. We (Semgrep) have started noticing this in CI runs, which makes pinning the root cause difficult. Note that this necessitated reordering `Domain` in stdlib/StdlibModules.
1 parent 3d8d8cb commit ba15bac

File tree

4 files changed

+11
-77
lines changed

4 files changed

+11
-77
lines changed

.depend

Lines changed: 7 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -9951,7 +9951,6 @@ ocamltest/main.cmo : \
99519951
ocamltest/variables.cmi \
99529952
otherlibs/unix/unix.cmi \
99539953
ocamltest/tsl_semantics.cmi \
9954-
ocamltest/tsl_parser.cmi \
99559954
ocamltest/tsl_lexer.cmi \
99569955
ocamltest/tsl_ast.cmi \
99579956
ocamltest/translate.cmi \
@@ -9970,8 +9969,7 @@ ocamltest/main.cmx : \
99709969
ocamltest/variables.cmx \
99719970
otherlibs/unix/unix.cmx \
99729971
ocamltest/tsl_semantics.cmx \
9973-
ocamltest/tsl_parser.cmx \
9974-
ocamltest/tsl_lexer.cmx \
9972+
ocamltest/tsl_lexer.cmi \
99759973
ocamltest/tsl_ast.cmx \
99769974
ocamltest/translate.cmx \
99779975
ocamltest/tests.cmx \
@@ -9994,7 +9992,7 @@ ocamltest/modifier_parser.cmo : \
99949992
ocamltest/modifier_parser.cmi
99959993
ocamltest/modifier_parser.cmx : \
99969994
ocamltest/variables.cmx \
9997-
ocamltest/tsl_lexer.cmx \
9995+
ocamltest/tsl_lexer.cmi \
99989996
ocamltest/ocamltest_stdlib.cmx \
99999997
ocamltest/environments.cmx \
100009998
ocamltest/modifier_parser.cmi
@@ -10230,19 +10228,13 @@ ocamltest/ocamltest_stdlib.cmo : \
1023010228
utils/misc.cmi \
1023110229
ocamltest/ocamltest_stdlib.cmi
1023210230
ocamltest/ocamltest_stdlib.cmx : \
10233-
ocamltest/ocamltest_unix.cmx \
10231+
ocamltest/ocamltest_unix.cmi \
1023410232
ocamltest/ocamltest_config.cmx \
1023510233
utils/misc.cmx \
1023610234
ocamltest/ocamltest_stdlib.cmi
1023710235
ocamltest/ocamltest_stdlib.cmi : \
1023810236
ocamltest/ocamltest_unix.cmi \
1023910237
utils/misc.cmi
10240-
ocamltest/ocamltest_unix.cmo : \
10241-
otherlibs/unix/unix.cmi \
10242-
ocamltest/ocamltest_unix.cmi
10243-
ocamltest/ocamltest_unix.cmx : \
10244-
otherlibs/unix/unix.cmx \
10245-
ocamltest/ocamltest_unix.cmi
1024610238
ocamltest/ocamltest_unix.cmi :
1024710239
ocamltest/ocamltest_unix_dummy.cmo :
1024810240
ocamltest/ocamltest_unix_dummy.cmx :
@@ -10298,15 +10290,13 @@ ocamltest/tests.cmi : \
1029810290
ocamltest/actions.cmi
1029910291
ocamltest/translate.cmo : \
1030010292
ocamltest/tsl_semantics.cmi \
10301-
ocamltest/tsl_parser.cmi \
1030210293
ocamltest/tsl_lexer.cmi \
1030310294
ocamltest/tsl_ast.cmi \
1030410295
parsing/location.cmi \
1030510296
ocamltest/translate.cmi
1030610297
ocamltest/translate.cmx : \
1030710298
ocamltest/tsl_semantics.cmx \
10308-
ocamltest/tsl_parser.cmx \
10309-
ocamltest/tsl_lexer.cmx \
10299+
ocamltest/tsl_lexer.cmi \
1031010300
ocamltest/tsl_ast.cmx \
1031110301
parsing/location.cmx \
1031210302
ocamltest/translate.cmi
@@ -10319,24 +10309,7 @@ ocamltest/tsl_ast.cmx : \
1031910309
ocamltest/tsl_ast.cmi
1032010310
ocamltest/tsl_ast.cmi : \
1032110311
parsing/location.cmi
10322-
ocamltest/tsl_lexer.cmo : \
10323-
ocamltest/tsl_parser.cmi \
10324-
ocamltest/tsl_lexer.cmi
10325-
ocamltest/tsl_lexer.cmx : \
10326-
ocamltest/tsl_parser.cmx \
10327-
ocamltest/tsl_lexer.cmi
10328-
ocamltest/tsl_lexer.cmi : \
10329-
ocamltest/tsl_parser.cmi
10330-
ocamltest/tsl_parser.cmo : \
10331-
ocamltest/tsl_ast.cmi \
10332-
parsing/location.cmi \
10333-
ocamltest/tsl_parser.cmi
10334-
ocamltest/tsl_parser.cmx : \
10335-
ocamltest/tsl_ast.cmx \
10336-
parsing/location.cmx \
10337-
ocamltest/tsl_parser.cmi
10338-
ocamltest/tsl_parser.cmi : \
10339-
ocamltest/tsl_ast.cmi
10312+
ocamltest/tsl_lexer.cmi :
1034010313
ocamltest/tsl_semantics.cmo : \
1034110314
ocamltest/variables.cmi \
1034210315
ocamltest/tsl_ast.cmi \
@@ -10376,7 +10349,6 @@ testsuite/lib/testing.cmi :
1037610349
testsuite/tools/codegen_main.cmo : \
1037710350
utils/profile.cmi \
1037810351
testsuite/tools/parsecmmaux.cmi \
10379-
testsuite/tools/parsecmm.cmi \
1038010352
testsuite/tools/lexcmm.cmi \
1038110353
asmcomp/emitaux.cmi \
1038210354
asmcomp/emit.cmi \
@@ -10387,8 +10359,7 @@ testsuite/tools/codegen_main.cmo : \
1038710359
testsuite/tools/codegen_main.cmx : \
1038810360
utils/profile.cmx \
1038910361
testsuite/tools/parsecmmaux.cmx \
10390-
testsuite/tools/parsecmm.cmx \
10391-
testsuite/tools/lexcmm.cmx \
10362+
testsuite/tools/lexcmm.cmi \
1039210363
asmcomp/emitaux.cmx \
1039310364
asmcomp/emit.cmx \
1039410365
middle_end/compilenv.cmx \
@@ -10434,46 +10405,7 @@ testsuite/tools/expect.cmx : \
1043410405
testsuite/tools/expect.cmi
1043510406
testsuite/tools/expect.cmi : \
1043610407
parsing/location.cmi
10437-
testsuite/tools/lexcmm.cmo : \
10438-
testsuite/tools/parsecmm.cmi \
10439-
utils/misc.cmi \
10440-
parsing/location.cmi \
10441-
lambda/lambda.cmi \
10442-
testsuite/tools/lexcmm.cmi
10443-
testsuite/tools/lexcmm.cmx : \
10444-
testsuite/tools/parsecmm.cmx \
10445-
utils/misc.cmx \
10446-
parsing/location.cmx \
10447-
lambda/lambda.cmx \
10448-
testsuite/tools/lexcmm.cmi
10449-
testsuite/tools/lexcmm.cmi : \
10450-
testsuite/tools/parsecmm.cmi
10451-
testsuite/tools/parsecmm.cmo : \
10452-
testsuite/tools/parsecmmaux.cmi \
10453-
utils/misc.cmi \
10454-
parsing/location.cmi \
10455-
lambda/lambda.cmi \
10456-
lambda/debuginfo.cmi \
10457-
utils/config.cmi \
10458-
asmcomp/cmm.cmi \
10459-
parsing/asttypes.cmi \
10460-
asmcomp/arch.cmi \
10461-
testsuite/tools/parsecmm.cmi
10462-
testsuite/tools/parsecmm.cmx : \
10463-
testsuite/tools/parsecmmaux.cmx \
10464-
utils/misc.cmx \
10465-
parsing/location.cmx \
10466-
lambda/lambda.cmx \
10467-
lambda/debuginfo.cmx \
10468-
utils/config.cmx \
10469-
asmcomp/cmm.cmx \
10470-
parsing/asttypes.cmx \
10471-
asmcomp/arch.cmx \
10472-
testsuite/tools/parsecmm.cmi
10473-
testsuite/tools/parsecmm.cmi : \
10474-
parsing/location.cmi \
10475-
lambda/lambda.cmi \
10476-
asmcomp/cmm.cmi
10408+
testsuite/tools/lexcmm.cmi :
1047710409
testsuite/tools/parsecmmaux.cmo : \
1047810410
parsing/location.cmi \
1047910411
lambda/lambda.cmi \

stdlib/.depend

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ stdlib__Digest.cmi : digest.mli
216216
stdlib__Domain.cmo : domain.ml \
217217
stdlib__Sys.cmi \
218218
stdlib.cmi \
219+
stdlib__Printexc.cmi \
219220
stdlib__Obj.cmi \
220221
stdlib__Mutex.cmi \
221222
stdlib__List.cmi \
@@ -226,6 +227,7 @@ stdlib__Domain.cmo : domain.ml \
226227
stdlib__Domain.cmx : domain.ml \
227228
stdlib__Sys.cmx \
228229
stdlib.cmx \
230+
stdlib__Printexc.cmx \
229231
stdlib__Obj.cmx \
230232
stdlib__Mutex.cmx \
231233
stdlib__List.cmx \

stdlib/StdlibModules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ STDLIB_MODULE_BASENAMES = \
7070
mutex \
7171
condition \
7272
semaphore \
73-
domain \
7473
camlinternalFormat \
7574
printf \
7675
arg \
7776
printexc \
77+
domain \
7878
fun \
7979
gc \
8080
in_channel \

stdlib/domain.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,6 @@ let join { term_sync ; _ } =
296296
in
297297
match Mutex.protect term_sync.mut loop with
298298
| Ok x -> x
299-
| Error ex -> raise ex
299+
| Error ex -> Printexc.raise_with_backtrace ex (Printexc.get_raw_backtrace ())
300300

301301
let recommended_domain_count = Raw.get_recommended_domain_count

0 commit comments

Comments
 (0)