From 6efabf807e61277c31431e6db437f9ffc2ff9f8d Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Wed, 8 Jun 2011 00:12:52 +0000 Subject: [PATCH] Fix problem with static error list. It's amazing we haven't seen problems with this before. The basic problem is that buf.errorList("whatever") would always return the same global, static error list, if it did not already exist. So, to a significant extent, there was only one global error list! git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38980 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Buffer.cpp | 10 ++++++++-- src/Buffer.h | 3 ++- src/frontends/qt4/GuiView.cpp | 4 ++-- src/insets/InsetInclude.cpp | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 117cfe0ca7..f7b91a682d 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -3154,9 +3154,9 @@ void Buffer::getSourceCode(odocstream & os, string const format, } -ErrorList & Buffer::errorList(string const & type) const +ErrorList const & Buffer::errorList(string const & type) const { - static ErrorList emptyErrorList; + static const ErrorList emptyErrorList; map::iterator it = d->errorLists.find(type); if (it == d->errorLists.end()) return emptyErrorList; @@ -3165,6 +3165,12 @@ ErrorList & Buffer::errorList(string const & type) const } +ErrorList & Buffer::errorList(string const & type) +{ + return d->errorLists[type]; +} + + void Buffer::updateTocItem(std::string const & type, DocIterator const & dit) const { diff --git a/src/Buffer.h b/src/Buffer.h index 9701f31913..1aeb66fe06 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -562,7 +562,8 @@ public: /// errors (like parsing or LateX compilation). This method is const /// because modifying the returned ErrorList does not touch the document /// contents. - ErrorList & errorList(std::string const & type) const; + ErrorList & errorList(std::string const & type); + ErrorList const & errorList(std::string const & type) const; /// The Toc backend. /// This is useful only for screen visualisation of the Buffer. This diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 15e05fd04c..90ed2fbe36 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -1451,13 +1451,13 @@ void GuiView::errors(string const & error_type, bool from_master) #if EXPORT_in_THREAD && (QT_VERSION >= 0x040400) // We are called with from_master == false by default, so we // have to figure out whether that is the case or not. - ErrorList & el = bv->buffer().errorList(error_type); + ErrorList & el = const_cast(bv->buffer().errorList(error_type)); if (el.empty()) { el = bv->buffer().masterBuffer()->errorList(error_type); from_master = true; } #else - ErrorList & el = from_master ? + ErrorList const & el = from_master ? bv->buffer().masterBuffer()->errorList(error_type) : bv->buffer().errorList(error_type); #endif diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp index 628cb00be3..94a996a81e 100644 --- a/src/insets/InsetInclude.cpp +++ b/src/insets/InsetInclude.cpp @@ -627,7 +627,7 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const "was not exported correctly.\nWarning: " "LaTeX export is probably incomplete."), included_file.displayName()); - ErrorList & el = tmp->errorList("Export"); + ErrorList const & el = tmp->errorList("Export"); if (!el.empty()) msg = bformat(from_ascii("%1$s\n\n%2$s\n\n%3$s"), msg, el.begin()->error, -- 2.39.2