mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-25 14:04:25 +00:00
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.
This commit is contained in:
parent
5a8b8ba8e1
commit
5093893b59
@ -426,10 +426,14 @@ void LaTeXFeatures::require(set<string> 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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -157,6 +157,8 @@ public:
|
||||
docstring const & htmlTitle() const { return htmltitle_; }
|
||||
|
||||
private:
|
||||
///
|
||||
void useLayout(docstring const &, int);
|
||||
///
|
||||
std::list<docstring> usedLayouts_;
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user