Bug 133044

Summary: regression: Since 3.5.4 KDE does not seem to wait for apps to quit before shutting down
Product: [Plasma] ksmserver Reporter: S. Burmeister <sven.burmeister>
Component: generalAssignee: Lubos Lunak <l.lunak>
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: openSUSE   
OS: Linux   
Latest Commit: Version Fixed In:

Description S. Burmeister 2006-08-26 23:10:38 UTC
Version:            (using KDE KDE 3.5.4)
Installed from:    SuSE RPMs
OS:                Linux

Since I isntalled 3.5.4 it often happens that on next startup e.g. kontact tells me that it is already running. Obviously it is not, but it was not shut down properly and hence the lock-file not removed. Read emails re-appear as unread.

Same for kmix, i.e. it does not save the mute state.

amarok sometimes does not get restarted, i.e. was apparently not saved as part of the session.

This did not happen in 3.5.3.
Comment 1 Lubos Lunak 2006-08-30 15:16:14 UTC
SVN commit 578861 by lunakl:

Increase timeout during session saving and killing.
BUG: 133044



 M  +2 -2      server.h  
 M  +12 -2     shutdown.cpp  


--- branches/KDE/3.5/kdebase/ksmserver/server.h #578860:578861
@@ -126,8 +126,8 @@
     void discardSession();
     void storeSession();
 
-    void startProtection() { protectionTimer.start( 8000, TRUE ); }
-    void endProtection() { protectionTimer.stop(); }
+    void startProtection();
+    void endProtection();
 
     void startApplication( QStringList command,
         const QString& clientMachine = QString::null,
--- branches/KDE/3.5/kdebase/ksmserver/shutdown.cpp #578860:578861
@@ -359,6 +359,16 @@
     state = Idle;
 }
 
+void KSMServer::startProtection()
+{
+    protectionTimer.start( 10000, true );
+}
+
+void KSMServer::endProtection()
+{
+    protectionTimer.stop();
+}
+
 /*
    Internal protection slot, invoked when clients do not react during
   shutdown.
@@ -445,7 +455,7 @@
     for ( KSMClient* c = clients.first(); c; c = clients.next() ) {
         if( isWM( c )) {
             kdDebug( 1218 ) << "Killing WM: " << c->program() << "(" << c->clientId() << ")" << endl;
-            QTimer::singleShot( 1000, this, SLOT( timeoutWMQuit()));
+            QTimer::singleShot( 2000, this, SLOT( timeoutWMQuit()));
             SmsDie( c->connection());
             return;
         }
@@ -467,7 +477,7 @@
     kdDebug( 1218 ) << " We killed all clients. We have now clients.count()=" <<
        clients.count() << endl;
     completeKilling();
-    QTimer::singleShot( 4000, this, SLOT( timeoutQuit() ) );
+    QTimer::singleShot( 10000, this, SLOT( timeoutQuit() ) );
 }
 
 void KSMServer::completeKilling()