diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2017-03-23 22:42:48 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2017-03-24 23:17:13 +0300 |
commit | 4f1dd8760ad4442d24cc7e67092a9ac50a36ccd0 (patch) | |
tree | aeb249281a0d25d9b963e10e19e808ae4f535a8f /butl/diagnostics | |
parent | 615d333787c1d8dc08df5e30c60ec20600a74b85 (diff) |
Fix diagnostics interleaving characters
Diffstat (limited to 'butl/diagnostics')
-rw-r--r-- | butl/diagnostics | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/butl/diagnostics b/butl/diagnostics index 56219ce..0c22337 100644 --- a/butl/diagnostics +++ b/butl/diagnostics @@ -21,10 +21,23 @@ namespace butl // // Diagnostics destination stream (std::cerr by default). Note that its - // modification is not MT-safe. + // modification is not MT-safe. Also note that concurrent writing to the + // stream from multiple threads can result in interleaved characters. To + // prevent this an object of diag_lock type (see below) must be created prior + // to write operation. // LIBBUTL_EXPORT extern std::ostream* diag_stream; + // Acquire the diagnostics exclusive access mutex in ctor, release in dtor. + // An object of the type must be created prior to writing to diag_stream (see + // above). + // + struct LIBBUTL_EXPORT diag_lock + { + diag_lock (); + ~diag_lock (); + }; + struct diag_record; template <typename> struct diag_prologue; template <typename> struct diag_mark; |