From: Georg Baum Date: Sat, 5 Jul 2014 12:37:55 +0000 (+0200) Subject: Fix LaTeXFeatures::useLayout() recursion test X-Git-Tag: 2.2.0alpha1~1786 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=5093893b59938ab3cb59612a90580d4b7956cfec;p=features.git Fix LaTeXFeatures::useLayout() recursion test It was broken in two ways: It was not threadsafe, and it did never detect any recursion, since the counter was decremented for each non-recursive call and never incremented again. --- diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index cb35fdfb83..506af187c9 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -426,10 +426,14 @@ void LaTeXFeatures::require(set const & names) void LaTeXFeatures::useLayout(docstring const & layoutname) +{ + useLayout(layoutname, 0); +} + + +void LaTeXFeatures::useLayout(docstring const & layoutname, int level) { // Some code to avoid loops in dependency definition - // FIXME THREAD - static int level = 0; const int maxlevel = 30; if (level > maxlevel) { lyxerr << "LaTeXFeatures::useLayout: maximum level of " @@ -449,9 +453,7 @@ void LaTeXFeatures::useLayout(docstring const & layoutname) require(layout.requires()); if (!layout.depends_on().empty()) { - ++level; - useLayout(layout.depends_on()); - --level; + useLayout(layout.depends_on(), level + 1); } usedLayouts_.push_back(layoutname); } else { @@ -459,8 +461,6 @@ void LaTeXFeatures::useLayout(docstring const & layoutname) << to_utf8(layoutname) << "' does not exist in this class" << endl; } - - --level; } diff --git a/src/LaTeXFeatures.h b/src/LaTeXFeatures.h index 71004be4ca..be00847f7e 100644 --- a/src/LaTeXFeatures.h +++ b/src/LaTeXFeatures.h @@ -157,6 +157,8 @@ public: docstring const & htmlTitle() const { return htmltitle_; } private: + /// + void useLayout(docstring const &, int); /// std::list usedLayouts_; ///