File tree Expand file tree Collapse file tree 4 files changed +38
-1
lines changed
Expand file tree Collapse file tree 4 files changed +38
-1
lines changed Original file line number Diff line number Diff line change @@ -80,6 +80,9 @@ let test_multi =
8080let test_threaded =
8181 test ~/ " test/test_threaded.ml" ~requires: [logs_fmt; logs_threaded; threads]
8282
83+ let test_mutext_safe =
84+ test ~/ " test/test_mutex_safe.ml" ~requires: [logs_fmt; logs_threaded; threads]
85+
8386let test_lwt =
8487 let requires = [b0_std; logs_fmt; logs_lwt; fmt; fmt_tty; lwt; lwt_unix] in
8588 test ~/ " test/test_lwt.ml" ~requires
Original file line number Diff line number Diff line change 1+
2+
3+ * Make log mutex immune to raising logging functions.
4+ Thanks to Nathan Taylor for the report and the repro (#57 ).
5+
16v0.9.0 2025-07-08 Zagreb
27------------------------
38
Original file line number Diff line number Diff line change @@ -188,7 +188,11 @@ let report src level ~over k msgf =
188188 let mutex = Atomic. get reporter_mutex' in
189189 let over () = over () ; mutex.unlock () in
190190 mutex.lock () ;
191- (Atomic. get reporter').report src level ~over k msgf
191+ try (Atomic. get reporter').report src level ~over k msgf with
192+ | exn ->
193+ let bt = Printexc. get_raw_backtrace () in
194+ over () ;
195+ Printexc. raise_with_backtrace exn bt
192196
193197let pp_brackets pp_v ppf v =
194198 Format. pp_print_char ppf '[' ; pp_v ppf v; Format. pp_print_char ppf ']'
Original file line number Diff line number Diff line change 1+ (* ---------------------------------------------------------------------------
2+ Copyright (c) 2025 The logs programmers. All rights reserved.
3+ SPDX-License-Identifier: ISC
4+ ---------------------------------------------------------------------------*)
5+
6+ (* See https://github.com/dbuenzli/logs/issues/57 *)
7+
8+ let src = Logs.Src. create " repro case"
9+ module Log = (val Logs. src_log src)
10+
11+ let setup_logs () =
12+ Logs. set_reporter (Logs_fmt. reporter () );
13+ Logs. set_level ~all: true (Some Logs. Debug );
14+ Logs_threaded. enable () ;
15+ let m = Mutex. create () in
16+ let lock () = Mutex. lock m and unlock () = Mutex. unlock m in
17+ Logs. set_reporter_mutex ~lock ~unlock
18+
19+ let main () =
20+ setup_logs () ;
21+ (try Logs. app (fun _m -> failwith " uh oh..." ) with Failure _ -> () );
22+ Logs. app (fun m -> m " It works!" );
23+ 0
24+
25+ let () = if ! Sys. interactive then () else exit (main () )
You can’t perform that action at this time.
0 commit comments