[Libreoffice-commits] .: sfx2/source

Michael Meeks mmeeks at kemper.freedesktop.org
Thu Nov 25 08:26:01 PST 2010


 sfx2/source/appl/shutdownicon.cxx |   26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

New commits:
commit 3583b0cab416295c2dd7d553eb7b5e6ee10d0101
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Thu Nov 25 16:25:55 2010 +0000

    fix crash in exiting via disabling lone quick-starter, terminate at idle

diff --git a/sfx2/source/appl/shutdownicon.cxx b/sfx2/source/appl/shutdownicon.cxx
index 4cd45e6..85e366f 100644
--- a/sfx2/source/appl/shutdownicon.cxx
+++ b/sfx2/source/appl/shutdownicon.cxx
@@ -182,6 +182,9 @@ bool ShutdownIcon::LoadModule( osl::Module **pModule,
     return true;
 }
 
+// These two timeouts are necessary to avoid there being
+// plugin frames still on the stack, after unloading that
+// code, causing a crash during disabling / termination.
 class IdleUnloader : Timer
 {
     ::osl::Module *m_pModule;
@@ -199,6 +202,22 @@ public:
     }
 };
 
+class IdleTerminate : Timer
+{
+    Reference< XDesktop > m_xDesktop;
+public:
+    IdleTerminate (Reference< XDesktop > xDesktop)
+    {
+        m_xDesktop = xDesktop;
+        Start();
+    }
+    virtual void Timeout()
+    {
+        m_xDesktop->terminate();
+        delete this;
+    }
+};
+
 void ShutdownIcon::initSystray()
 {
     if (m_bInitialized)
@@ -576,11 +595,8 @@ void ShutdownIcon::terminateDesktop()
     if ( xSupplier.is() )
     {
         Reference< XIndexAccess > xTasks ( xSupplier->getFrames(), UNO_QUERY );
-        if( xTasks.is() )
-        {
-            if( xTasks->getCount() < 1 )
-                xDesktop->terminate();
-        }
+        if( xTasks.is() && xTasks->getCount() < 1 )
+            new IdleTerminate( xDesktop );
     }
 
     // remove the instance pointer


More information about the Libreoffice-commits mailing list