On Tue, Jun 23, 2015 at 02:23:18PM +0100, Guillaume M-M wrote:
> Le 23/06/2015 10:46, Enrico Forestieri a écrit :
> >
> >Indeed, this has to do with the general problem of copying macros and
> >how the various structures are carried on when copying.
>
> OK for the fact that this is not a regression, but why should it be
> different depending on whether preview is on or off?
I don't know, maybe this is a case of a race condition. Most probably,
with preview on, updateMacros() is not called (or is called later) and
the MacroData:sym_ pointer is not updated at the time MacroData::xlmname()
is called so that it contains bogus values. This seems to be confirmed by
the attached patch that explicitly sets to null the MacroData::sym_ pointer
whenever a macro is copied. With this patch the crash is gone for me.
I think that this is to be considered as a different instance of #9418,
as also witnessed by the exact same backtrace.
--
Enrico
diff --git a/src/mathed/MathMacro.cpp b/src/mathed/MathMacro.cpp
index 24ebe77..4597ceb 100644
--- a/src/mathed/MathMacro.cpp
+++ b/src/mathed/MathMacro.cpp
@@ -203,6 +203,8 @@ MathMacro::MathMacro(MathMacro const & that)
: InsetMathNest(that), d(new Private(*that.d))
{
d->updateChildren(this);
+ if (d->macro_)
+ const_cast<MacroData *>(d->macro_)->setSymbol(0);
}
@@ -213,6 +215,8 @@ MathMacro & MathMacro::operator=(MathMacro const & that)
InsetMathNest::operator=(that);
*d = *that.d;
d->updateChildren(this);
+ if (d->macro_)
+ const_cast<MacroData *>(d->macro_)->setSymbol(0);
return *this;
}