Bug 166367 - [testcase] The kontact process remains after quitting
Summary: [testcase] The kontact process remains after quitting
Status: RESOLVED FIXED
Alias: None
Product: kontact
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: unspecified Linux
: NOR normal
Target Milestone: ---
Assignee: kdepim bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-07-12 13:52 UTC by Christophe Marin
Modified: 2008-07-13 14:55 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Christophe Marin 2008-07-12 13:52:39 UTC
Version:           unknown (using 4.1.60 (KDE 4.1.60 (KDE 4.2 >= 20080709)), compiled sources)
Compiler:          gcc-4.3
OS:                Linux (i686) release 2.6.25-2-486

kdepimlibs rev. 831161
kdepim rev. 831164

Testcase :
- Launch kontact,
- switch to the Akregator module,
- Open an article in a tab (Using the "Complete Story" link)
- File / Quit

The window will disappear, so will the systray icons but the Kontact process is still running.
I tried to attach gdb to its pid without getting any useful information.

Console output after clicking on quit : 

kontact(26071)/kparts KParts::MainWindow::createGUI: MainWindow::createGUI, part= QObject(0x0)       ""                                                                                                                                              
kontact(26071)/kparts KParts::MainWindow::createGUI: deactivating GUI for  Akregator::Part(0x9f75bb8)   Akregator::Part   ""                    
kontact(26071)/kmail KMailPart::~KMailPart: Closing last KMMainWin: stopping mail check                                                         
kontact(26071)/kparts KParts::Part::slotWidgetDestroyed: KPart::slotWidgetDestroyed(), deleting part  "mViewer"                                 
kontact(26071)/khtml (part) KHTMLPart::~KHTMLPart: KHTMLPart(0x9a3e060, name = "mViewer")                                                       
kontact(26071)/kparts KParts::PartManager::setActivePart: KParts::PartManager(0x9f39eb8, name = "khtml part manager")  emitting activePartChanged  QObject(0x0)                                                                                                                                 
kontact(26071)/kmail (storage internals) KMFolderMaildir::close: fclose(mIndexStream =  0x9c59ed8 )                                             
kontact(26071)/kmail (storage internals) KMFolderMaildir::close: fclose(mIndexStream =  0x9cda570 )                                             
kontact(26071)/kmail (storage internals) KMFolderMaildir::close: fclose(mIndexStream =  0x9c75460 )                                             
kontact(26071)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: KCoreConfigSkeleton::writeConfig()                                   
kontact(26071)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::readConfig: KCoreConfigSkeleton::readConfig()                                     
kontact(26071)/kmail KMKernel::~KMKernel:                                                                                                       
kontact(26071)/kutils (KSettings::Dispatcher) KSettings::Dispatcher::DispatcherPrivate::unregisterComponent: componentName= "kmail" refcount= 0 
kontact(26071)/kparts KParts::Part::~Part: deleting widget  QWidget(0x9cfd698)   ""                                                             
kontact(26071)/kmail KMail::Vacation::~Vacation: ~Vacation()                                                                                    
kontact(26071) Akregator::Part::~Part: Part::~Part() enter                                                                                      
kontact(26071)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: KCoreConfigSkeleton::writeConfig()                                   
kontact(26071)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::readConfig: KCoreConfigSkeleton::readConfig()                                     
kontact(26071) Akregator::SubscriptionListModel::aboutToRemoveSubscription: 1256218933                                                          
kontact(26071) Akregator::SubscriptionListModel::aboutToRemoveSubscription: 1256218933                                                          
kontact(26071) Akregator::SubscriptionListModel::subscriptionRemoved: 

[cut]
                                                           
kontact(26071) Akregator::SubscriptionListView::saveHeaderSettings: 0                                                                           
kontact(26071) Akregator::SubscriptionListView::saveHeaderSettings: 1                                                                           
kontact(26071) Akregator::SubscriptionListView::saveHeaderSettings: 2
kontact(26071)/kparts KParts::Part::slotWidgetDestroyed: KPart::slotWidgetDestroyed(), deleting part  ""
kontact(26071)/khtml (part) KHTMLPart::~KHTMLPart: KHTMLPart(0x9fd19e8)
kontact(26071)/kparts KParts::PartManager::setActivePart: KParts::PartManager(0x9fd3360, name = "khtml part manager")  emitting activePartChanged  QObject(0x0)
kontact(26071)/kdecore (KAcceleratorManager) QWidgetStackAccelManager::currentChanged: invalid index provided
kontact(26071)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: KCoreConfigSkeleton::writeConfig()
kontact(26071)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::readConfig: KCoreConfigSkeleton::readConfig()
kontact(26071) Akregator::Part::~Part: Part::~Part(): leaving
kontact(26071)/kparts KParts::PartManager::setActivePart: KParts::PartManager(0x996d490)  emitting activePartChanged  QObject(0x0)
kontact(26071)/kparts KParts::MainWindow::createGUI: MainWindow::createGUI, part= QObject(0x0)       ""
kontact(26071)/kparts KParts::Part::~Part: deleting widget  Akregator::MainWidget(0x9f897c8, name = "akregator_view")   "akregator_view"
kontact(26071)/khtml (part) KHTMLPart::~KHTMLPart: KHTMLPart(0x9fd4150, name = "KHTML")
kontact(26071)/kparts KParts::PartManager::setActivePart: KParts::PartManager(0xa78dd98, name = "khtml part manager")  emitting activePartChanged  QObject(0x0)
kontact(26071)/khtml (part) KHTMLPart::~KHTMLPart: KHTMLPart(0xa693c40, name = "navbar-iframe")
kontact(26071)/kparts KParts::PartManager::setActivePart: KParts::PartManager(0xa8a1388, name = "khtml part manager")  emitting activePartChanged  QObject(0x0)
kontact(26071)/kparts KParts::Part::~Part: deleting widget  KHTMLView(0xa8a0e58)   ""
kontact(26071)/kparts KParts::Part::~Part: deleting widget  KHTMLView(0xa773bc8)   ""
kontact(26071) Akregator::OnlineSyncPlugin::~OnlineSyncPlugin:
kontact(26071)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: KCoreConfigSkeleton::writeConfig()
kontact(26071)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::readConfig: KCoreConfigSkeleton::readConfig()
kontact(26071)/kparts KParts::Part::slotWidgetDestroyed: KPart::slotWidgetDestroyed(), deleting part  ""
kontact(26071)/khtml (part) KHTMLPart::~KHTMLPart: KHTMLPart(0x988c8c8)
kontact(26071)/kparts KParts::PartManager::setActivePart: KParts::PartManager(0x988bf18, name = "khtml part manager")  emitting activePartChanged  QObject(0x0)
kontact(26071)/kutils (KSettings::Dispatcher) KSettings::Dispatcher::DispatcherPrivate::unregisterComponent: componentName= "kontact" refcount=0
Comment 1 Allen Winter 2008-07-12 15:13:08 UTC
so far I am unable to reproduce this on my Fedora 9 system with trunk.
Comment 2 Christophe Marin 2008-07-12 18:26:59 UTC
after many attempts, here's the bt if I attach gdb to the remaining process :

0xb7fdc430 in __kernel_vsyscall ()
(gdb) bt
#0  0xb7fdc430 in __kernel_vsyscall ()
#1  0xb55f4b27 in poll () from /lib/i686/cmov/libc.so.6
#2  0xb53b97a2 in g_main_context_iterate (context=0x8bf1260, block=1, dispatch=1, self=0x8bee058) at /tmp/buildd/glib2.0-2.16.4/glib/gmain.c:2954
#3  0xb53b9ad1 in IA__g_main_context_iteration (context=0x8bf1260, may_block=1) at /tmp/buildd/glib2.0-2.16.4/glib/gmain.c:2708
#4  0xb6b7aed6 in QEventDispatcherGlib::processEvents (this=0x8bea2b8, flags={i = -1073776824}) at kernel/qeventdispatcher_glib.cpp:325
#5  0xb5a57118 in QGuiEventDispatcherGlib::processEvents (this=0x8bea2b8, flags={i = -1073776776}) at kernel/qguieventdispatcher_glib.cpp:204
#6  0xb6b4a2ac in QEventLoop::processEvents (this=0xbfff77f0, flags={i = -1073776716}) at kernel/qeventloop.cpp:149
#7  0xb6b4a4e9 in QEventLoop::exec (this=0xbfff77f0, flags={i = -1073776648}) at kernel/qeventloop.cpp:196
#8  0xb6b4da87 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:845
#9  0xb59b2fa2 in QApplication::exec () at kernel/qapplication.cpp:3304
#10 0x0804b72d in main (argc=1, argv=0xbfff7a14) at /media/kde/src/KDE/kdepim/kontact/src/main.cpp:218
Comment 3 Christophe Marin 2008-07-12 18:39:00 UTC
If I kill kontact at this point I get this btw : 

*** KMail got signal 15 (Exiting)
kontact: /media/kde/src/KDE/kdepim/kmail/kmkernel.cpp:2096: static KMKernel* KMKernel::self():  assert « mySelf » failed.
*** KMail got signal 6 (Crashing)
kontact: /media/kde/src/KDE/kdepim/kmail/kmkernel.cpp:2096: static KMKernel* KMKernel::self():  assert « mySelf » failed.

Comment 4 Christophe Marin 2008-07-12 21:10:57 UTC
Reverting Thomas' commit (830027) seems to solve my problem. I don't see the ghost process anymore after that.

Comment 5 Christophe Marin 2008-07-12 21:27:56 UTC
After some more testing, reverting kdepim/kontact/src/main.cpp to 830026 is enough.
Comment 6 Thomas McGuire 2008-07-13 14:49:44 UTC
SVN commit 831845 by tmcguire:

Also quit the event loop when a part still holds a reference to a KGlobal object,
probably by a KJob which wasn't properly deleted.

This fixes that the Kontact process was still running (without a window) after viewing
an article in Akregator.

The real fix would be to fix Akregator, it should take care of properly cleaning
up each KJob.

@David: maybe KJob::allowQuitWhileJobsAreRunning(bool) wasn't such a bad idea after all?

CCBUG: 163479
BUG: 166367


 M  +6 -0      mainwindow.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=831845
Comment 7 Thomas McGuire 2008-07-13 14:55:16 UTC
SVN commit 831851 by tmcguire:

Backport r831845 by tmcguire to the 4.1 branch:

Also quit the event loop when a part still holds a reference to a KGlobal object,
probably by a KJob which wasn't properly deleted.

This fixes that the Kontact process was still running (without a window) after viewing
an article in Akregator.

The real fix would be to fix Akregator, it should take care of properly cleaning
up each KJob.

@David: maybe KJob::allowQuitWhileJobsAreRunning(bool) wasn't such a bad idea after all?

CCCCBUG: 163479
CCBUG: 166367


 M  +6 -0      mainwindow.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=831851