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.

Reply via email to