aboutsummaryrefslogtreecommitdiff
path: root/butl/diagnostics.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'butl/diagnostics.cxx')
-rw-r--r--butl/diagnostics.cxx25
1 files changed, 17 insertions, 8 deletions
diff --git a/butl/diagnostics.cxx b/butl/diagnostics.cxx
index 4cd8515..7dc8bd0 100644
--- a/butl/diagnostics.cxx
+++ b/butl/diagnostics.cxx
@@ -17,14 +17,23 @@ namespace butl
{
if (!empty_)
{
- os.put ('\n');
- *diag_stream << os.str ();
- diag_stream->flush ();
-
- empty_ = true;
-
- if (epilogue_ != nullptr)
- epilogue_ (*this); // Can throw.
+ if (epilogue_ == nullptr)
+ {
+ os.put ('\n');
+ *diag_stream << os.str ();
+ diag_stream->flush ();
+
+ empty_ = true;
+ }
+ else
+ {
+ // Clear the epilogue in case it calls us back.
+ //
+ auto e (epilogue_);
+ epilogue_ = nullptr;
+ e (*this); // Can throw.
+ flush (); // Call ourselves to write the data in case it returns.
+ }
}
}