From 8ad62d6b00adf657ef7b468778a0964007aca383 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 24 Mar 2017 14:47:57 +0300 Subject: Fix diagnostics interleaving characters --- build2/algorithm.cxx | 6 ++++-- build2/diagnostics | 1 + build2/dump.cxx | 3 +++ build2/test/rule.cxx | 3 ++- build2/test/script/builtin.cxx | 3 ++- build2/test/script/parser.cxx | 3 ++- 6 files changed, 14 insertions(+), 5 deletions(-) (limited to 'build2') diff --git a/build2/algorithm.cxx b/build2/algorithm.cxx index 9357632..c9396ef 100644 --- a/build2/algorithm.cxx +++ b/build2/algorithm.cxx @@ -487,7 +487,8 @@ namespace build2 } catch (const std::exception& e) { - *diag_stream << "unhandled exception: " << e; + diag_lock l; + *diag_stream << "unhandled exception: " << e << endl; assert (false); abort (); } @@ -789,7 +790,8 @@ namespace build2 } catch (const std::exception& e) { - *diag_stream << "unhandled exception: " << e; + diag_lock l; + *diag_stream << "unhandled exception: " << e << endl; assert (false); abort (); } diff --git a/build2/diagnostics b/build2/diagnostics index b889fd4..2c2b4bb 100644 --- a/build2/diagnostics +++ b/build2/diagnostics @@ -110,6 +110,7 @@ namespace build2 // Diagnostic facility, base infrastructure. // + using butl::diag_lock; using butl::diag_stream; using butl::diag_epilogue; diff --git a/build2/dump.cxx b/build2/dump.cxx index 7055a78..6d055ae 100644 --- a/build2/dump.cxx +++ b/build2/dump.cxx @@ -345,6 +345,9 @@ namespace build2 auto i (scopes.cbegin ()); assert (&i->second == global_scope); + // We don't lock diag_stream here as dump() is supposed to be called from + // the main thread prior to any other threads being spawned. + // string ind; ostream& os (*diag_stream); dump_scope (os, ind, i); diff --git a/build2/test/rule.cxx b/build2/test/rule.cxx index 25eb0b8..8e39104 100644 --- a/build2/test/rule.cxx +++ b/build2/test/rule.cxx @@ -399,7 +399,8 @@ namespace build2 } catch (const std::exception& e) { - *diag_stream << "unhandled exception: " << e; + diag_lock l; + *diag_stream << "unhandled exception: " << e << endl; assert (false); abort (); } diff --git a/build2/test/script/builtin.cxx b/build2/test/script/builtin.cxx index d96058e..9bd6a1b 100644 --- a/build2/test/script/builtin.cxx +++ b/build2/test/script/builtin.cxx @@ -1361,7 +1361,8 @@ namespace build2 } catch (const std::exception& e) { - *diag_stream << "unhandled exception: " << e; + diag_lock l; + *diag_stream << "unhandled exception: " << e << endl; assert (false); abort (); } diff --git a/build2/test/script/parser.cxx b/build2/test/script/parser.cxx index 0555f2f..d6d77fe 100644 --- a/build2/test/script/parser.cxx +++ b/build2/test/script/parser.cxx @@ -2881,7 +2881,8 @@ namespace build2 } catch (const std::exception& e) { - *diag_stream << "unhandled exception: " << e; + diag_lock l; + *diag_stream << "unhandled exception: " << e << endl; assert (false); abort (); } -- cgit v1.1