[X2Go-Commits] [nx-libs] 01/02: nxcomp/src/Log.h: handle errors due to missing buffers more gracefully.
git-admin at x2go.org
git-admin at x2go.org
Mon Dec 25 03:51:03 CET 2017
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch 3.6.x-rpm-debug
in repository nx-libs.
commit be06f2156b16006fc0cb01c08fe2b5b04c108d7b
Author: Mihai Moldovan <ionic at ionic.de>
Date: Mon Dec 25 03:49:09 2017 +0100
nxcomp/src/Log.h: handle errors due to missing buffers more gracefully.
This error is surprisingly easy to trigger, so we should make sure that
the program does not crash.
---
nxcomp/src/Log.h | 43 ++++++++++++++++++++++++++++++-------------
1 file changed, 30 insertions(+), 13 deletions(-)
diff --git a/nxcomp/src/Log.h b/nxcomp/src/Log.h
index e6fb815..ab1807c 100644
--- a/nxcomp/src/Log.h
+++ b/nxcomp/src/Log.h
@@ -447,10 +447,19 @@ class NXLog
{
if ( synchronized() )
{
- per_thread_data *pdt = get_data();
- assert (!pdt->buffer.empty ());
- (*pdt->buffer.top()) << F;
- flush();
+ /* Verbosely discard data if we don't have a buffer. */
+ if (!(out.has_buffer()))
+ {
+ std::cerr << "WARNING: no buffer available! "
+ << "Internal state error!\n" << "Log hunk will be discarded!" << std::endl;
+ }
+ else
+ {
+ per_thread_data *pdt = get_data();
+ assert (!pdt->buffer.empty ());
+ (*pdt->buffer.top()) << F;
+ flush();
+ }
}
else
{
@@ -532,16 +541,24 @@ NXLog& operator<<(NXLog& out, const T& value)
{
if ( out.synchronized() )
{
- // In synchronized mode, we buffer data until a newline, std::flush, or the buffer
- // gets full. Then we dump the whole thing at once to the output stream, synchronizing
- // with a mutex.
- NXLog::per_thread_data *pdt = out.get_data();
- assert (!pdt->buffer.empty ());
- (*pdt->buffer.top()) << value;
-
- if ( ss_length(pdt->buffer.top()) >= out.thread_buffer_size_ || has_newline(value) )
- out.flush();
+ /* Verbosely discard data if we don't have a buffer. */
+ if (!(out.has_buffer()))
+ {
+ std::cerr << "WARNING: no buffer available! "
+ << "Internal state error!\n" << "Log hunk will be discarded!" << std::endl;
+ }
+ else
+ {
+ // In synchronized mode, we buffer data until a newline, std::flush, or the buffer
+ // gets full. Then we dump the whole thing at once to the output stream, synchronizing
+ // with a mutex.
+ NXLog::per_thread_data *pdt = out.get_data();
+ assert (!pdt->buffer.empty ());
+ (*pdt->buffer.top()) << value;
+ if ( ss_length(pdt->buffer.top()) >= out.thread_buffer_size_ || has_newline(value) )
+ out.flush();
+ }
}
else
{
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/nx-libs.git
More information about the x2go-commits
mailing list