From 478f413b80204ac4097b8db8a6ae5056d14adb54 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 1 Mar 2017 17:53:09 +0200 Subject: Support fancier epilogues in diagnostics --- butl/diagnostics.cxx | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'butl/diagnostics.cxx') 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. + } } } -- cgit v1.1