Georg Baum wrote:
> Peter Kümmel wrote:
>
>> Georg Baum wrote:
>>> Peter Kümmel wrote:
>>>
>>>> I think the reason for the crash is :
>>>>
>>>> lyx-qt3.exe!`anonymous namespace'::`dynamic atexit destructor for
>>>> 'theCuts''() + 0xd bytes C++ msvcr80d.dll!102020c6()
>>>> lyx-qt3.exe!LyXServer::`scalar deleting destructor'() + 0x27 bytes
>>>> C++ msvcr80d.dll!10201e00()
>>>> lyx-qt3.exe!lyx_gui::exit(int status=0) Line 281 + 0xc bytes C++
>>>> lyx-qt3.exe!QuitLyX(bool noask=false) Line 220 + 0x7 bytes C++
>>>>
>>>>
>>>> the free variable theCuts, it is destructed first, and I assume the
>>>> values are later on used.
>>> I don't think so. The backtrace tells about a problem in the destructor,
>>> not in using theCuts. If theCuts would be used after destruction, then
>>> the destructor would not occur in the backtrace, but the code using
>>> theCuts afterwards, no?
>>>
>> above backtrace was not complete, it only shows the destruction of theCuts
>> the more complete is here:
>>
>>
> http://www.mail-archive.com/[email protected]/msg101523.html
>
> Still I don't see how the problem could be in code using theCuts after
> destruction. It rather looks like something going wrong in destructors
> called from ~CutStack().
Yes, I've verified that it crashes while destructing theCut, and not
after this destruction.
> I think that the attached patch should fix the problem.
Will test it.
>> Nevertheless static (global) variables only make problems.
>
> That is exagerrated,but I agree that they should be avoided if possible.
>
>
> Georg
>
>
> ------------------------------------------------------------------------
>
> Index: src/frontends/Dialogs.C
> ===================================================================
> --- src/frontends/Dialogs.C (Revision 15111)
> +++ src/frontends/Dialogs.C (Arbeitskopie)
> @@ -73,6 +73,14 @@ Dialogs::Dialogs(LyXView & lyxview)
> }
>
>
> +Dialogs::~Dialogs()
> +{
> + // Disconnect signals
> + redrawGUI().disconnect_all_slots();
> + hideSignal().disconnect_all_slots();
> +}
> +
> +
> Dialog * Dialogs::find_or_build(string const & name)
> {
> if (!isValidName(name))
> Index: src/frontends/Dialogs.h
> ===================================================================
> --- src/frontends/Dialogs.h (Revision 15111)
> +++ src/frontends/Dialogs.h (Arbeitskopie)
> @@ -33,6 +33,8 @@ class Dialogs : boost::noncopyable {
> public:
> ///
> Dialogs(LyXView &);
> + ///
> + ~Dialogs();
>
> /** Redraw all visible dialogs because, for example, the GUI colours
> * have been re-mapped.
Ahh..., means nearly recompile all.
--
Peter Kümmel