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().
I think that the attached patch should fix the problem.
> 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.