| Summary: | Catalogmanager aborts while constantly showing a flickering "data" subdirectory above the usual catalogs | ||
|---|---|---|---|
| Product: | [Unmaintained] kbabel | Reporter: | Stephan Johach <hunsum> |
| Component: | CatalogManager | Assignee: | Stanislav Visnovsky <visnovsky> |
| Status: | RESOLVED FIXED | ||
| Severity: | crash | CC: | nicolasg, tr |
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Compiled Sources | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Stephan Johach
2005-12-30 11:01:37 UTC
Using kdebugdialog I got the following traces on konsole. Beware: I only did a "touch" in <folder>de/messages/extragear-graphics. [ ... skipped many messages like this ...] catalogmanager: directory changed: /data/koffice/ catalogmanager: building dir: /data/ catalogmanager: skipping /data/kdeedu/khangman/ catalogmanager: skipping /data/kdeedu/kturtle/ catalogmanager: skipping /data/kdeedu/ catalogmanager: skipping /data/kdegames/ktuberling/ catalogmanager: skipping /data/kdegames/ catalogmanager: skipping /data/koffice/autocorrect/ catalogmanager: skipping /data/koffice/ catalogmanager: directory changed: /data/koffice/autocorrect/ catalogmanager: building dir: /data/ catalogmanager: skipping /data/kdeedu/khangman/ catalogmanager: skipping /data/kdeedu/kturtle/ catalogmanager: skipping /data/kdeedu/ catalogmanager: skipping /data/kdegames/ktuberling/ catalogmanager: skipping /data/kdegames/ catalogmanager: skipping /data/koffice/autocorrect/ catalogmanager: skipping /data/koffice/ catalogmanager: directory changed: /docmessages/ catalogmanager: updating dir /docmessages/ catalogmanager: directory changed: /docmessages/extragear-graphics/ catalogmanager: updating dir /docmessages/extragear-graphics/ catalogmanager: directory changed: /docmessages/extragear-multimedia/ catalogmanager: updating dir /docmessages/extragear-multimedia/ catalogmanager: directory changed: /docmessages/extragear-network/ catalogmanager: updating dir /docmessages/extragear-network/ catalogmanager: directory changed: /docmessages/kdeaccessibility/ catalogmanager: updating dir /docmessages/kdeaccessibility/ [1]+ Segmentation fault catalogmanager I do not know what is happening. A directory being in the PO directory but not in the POT one should not be a problem, at least I do not have a problem with the "internal" directory of trunk/l10n/xx Just to be sure: you have a file system that is precise to the second, so no VFAT (or any older Windows/MS-DOS file system). Also in the data directory, you have no file name ending in .po , have you? Have a nice day! No po file under "data". This is the output of ls -R: hunsum@leviathan:~/svn/kde3.5/l10n/de/data$ ls -R .: Makefile Makefile.am Makefile.in kdeedu kdegames koffice ./kdeedu: Makefile Makefile.am Makefile.in khangman kturtle ./kdeedu/khangman: IMPROVE.txt Makefile Makefile.am Makefile.in animals.kvtml de.txt easy.kvtml hard.kvtml medium.kvtml ./kdeedu/kturtle: Makefile beispiel1.logo einmaleins.logo logokeywords.de_DE.xml pfeil.logo werbung.logo Makefile.am dreieck.logo locken.logo nikolaus.logo quadrat.logo zufallsname.logo Makefile.in dreiecke.logo logohighlightstyle.de_DE.xml papierfarben.logo quadrateimkreis.logo ./kdegames: Makefile Makefile.am Makefile.in ktuberling ./kdegames/ktuberling: Makefile Makefile.in auge.wav brille.wav haare.wav ohr.wav schnurrbart.wav Makefile.am abzeichen.wav augenbraue.wav fliege.wav hut.wav ohrring.wav uhr.wav ./koffice: Makefile Makefile.am Makefile.in autocorrect ./koffice/autocorrect: Makefile Makefile.am Makefile.in de.xml hunsum@leviathan:~/svn/kde3.5/l10n/de/data$ This trace looks like an endless loop. It is stoped when I close catalogmanager. The single '/' looks somehow suspicious. catalogmanager: building dir: /autom4te.cache/ catalogmanager: directory changed: / catalogmanager: updating dir / catalogmanager: directory changed: /autom4te.cache/ catalogmanager: building dir: /autom4te.cache/ catalogmanager: directory changed: / catalogmanager: updating dir / catalogmanager: directory changed: /autom4te.cache/ catalogmanager: building dir: /autom4te.cache/ catalogmanager: directory changed: / catalogmanager: updating dir / catalogmanager: directory changed: /autom4te.cache/ catalogmanager: building dir: /autom4te.cache/ catalogmanager: directory changed: / catalogmanager: updating dir / I put some additional kdDebug() traces in. And it looks like after a "touch *.po" catalogmanager is eternally doing the following steps. Perhaps you have to open a catalog in the view to get the flickering started. The traces starting with "catalogmanager: directory changed: /autom4te.cache/" are looping. The directories are skipped until the processing again reaches /de. Then it starts processing autom4te.cache and data again. If you like I can send you the complete (and rather long) trace by mail. Here's the relevant part, when the looping starts: catalogmanager: void CatalogManagerView::directoryChanged(const QString& dir)/home/hunsum/svn/kde3.5/l10n/de catalogmanager: directory changed: / catalogmanager: updating dir / catalogmanager: void CatalogManagerView::directoryChanged(const QString& dir)/home/hunsum/svn/kde3.5/l10n/de/autom4te.cache catalogmanager: directory changed: /autom4te.cache/ catalogmanager: building dir: /autom4te.cache/ catalogmanager: bool CatalogManagerView::buildDir(QString relDir,bool fast)/autom4te.cache/ catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/templates /autom4te.cache/ .pot catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /autom4te.cache/ .po catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/autom4te.cache/ catalogmanager: void CatalogManagerView::directoryChanged(const QString& dir)/home/hunsum/svn/kde3.5/l10n/de/data catalogmanager: directory changed: /data/ catalogmanager: building dir: /data/ catalogmanager: bool CatalogManagerView::buildDir(QString relDir,bool fast)/data/ catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/templates /data/ .pot catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /data/ .po catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /data/kdeedu/ .po catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /data/kdeedu/khangman/ .po catalogmanager: skipping /data/kdeedu/khangman/ catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/data/kdeedu/khangman/ catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /data/kdeedu/kturtle/ .po catalogmanager: skipping /data/kdeedu/kturtle/ catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/data/kdeedu/kturtle/ catalogmanager: skipping /data/kdeedu/ catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/data/kdeedu/ catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /data/kdegames/ .po catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /data/kdegames/ktuberling/ .po catalogmanager: skipping /data/kdegames/ktuberling/ catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/data/kdegames/ktuberling/ catalogmanager: skipping /data/kdegames/ catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/data/kdegames/ catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /data/koffice/ .po catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool fast)/home/hunsum/svn/kde3.5/l10n/de /data/koffice/autocorrect/ .po catalogmanager: skipping /data/koffice/autocorrect/ catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/data/koffice/autocorrect/ catalogmanager: skipping /data/koffice/ catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/data/koffice/ catalogmanager: void CatalogManagerView::deleteDirItem(QString relDir)/data/ catalogmanager: void CatalogManagerView::directoryChanged(const QString& dir)/home/hunsum/svn/kde3.5/l10n/de catalogmanager: directory changed: / catalogmanager: updating dir / catalogmanager: void CatalogManagerView::directoryChanged(const QString& dir)/home/hunsum/svn/kde3.5/l10n/de/autom4te.cache catalogmanager: directory changed: /autom4te.cache/ catalogmanager: building dir: /autom4te.cache/ catalogmanager: bool CatalogManagerView::buildDir(QString relDir,bool fast)/autom4te.cache/ catalogmanager: CatalogManagerView::buildDir(const QString& baseDir,const QString& relDir, const QString extension , bool I am wondering how much the KDirWatch fixes that were rencently made in KDE 3.5.x would affect or fix that problem. (Also I suppose that I do not see any problem, as my system uses (direct) polling and neither any library nor Linux to check for changed files.) Have a nice day! I enabled KDirWatch debug output and it stated using the "stat" method. I switched then to dnotify today with recent kdelibs from branch and the problem disappeared, at least until now. I did the above mentioned "touch *.po" several times, and no flickering any more. So KDirWatch seems indeed to have some influence on the issue. I can confirm that the bug exists. As soon as i switched to dnotify the bug disappeared. So it seems the bug is somehow related to KDirWatch. Bye, Thomas Hm, it seems i have to correct my previous comment :( The bug is not fixed when using dnotify, it is just delayed until i minimize and restore the catalogmanager window. So with dnotify enabled the bug is triggered by restoring catalogmanager window or by switching desktops. Hm, funny ;-) *argh* i have to correct myself _again_ :-( dnotify wasn't working correctly on my system when i wrote the previous comment. now it is working and the bug definitely is fixed with it being enabled. But my previous comment isn't completely useless since it describes a way to reproduce/trigger the bug without dnotify :) SVN commit 651172 by aseigo:
this may block the gui briefly (though testers didn't seem to notice in
any case), but most importantly it doesn't crash anymore.
BUGS:119222,129152
M +2 -23 catalogmanagerview.cpp
--- branches/KDE/3.5/kdesdk/kbabel/catalogmanager/catalogmanagerview.cpp #651171:651172
@@ -323,12 +323,10 @@
if(flag)
{
_updateTimer->stop();
- if( _dirWatch ) _dirWatch->stopScan();
}
else
{
_updateTimer->start(10000);
- if( _dirWatch ) _dirWatch->startScan();
}
}
@@ -1378,7 +1376,6 @@
}
} else kdDebug(KBABEL_CATMAN) << "Skipping " << item->poFile() << endl;
emit signalSearchedFile(1);
- kapp->processEvents(10);
if( _stop || _stopSearch ) {
_stopSearch = false;
rest.clear();
@@ -1842,11 +1839,7 @@
while ( it.current() && !_stop)
{
it.current()->checkUpdate(true);
-
- kapp->processEvents(10);
-
- i++;
-
+ ++i;
++it;
}
@@ -1856,11 +1849,7 @@
while ( dit.current() && !_stop)
{
dit.current()->checkUpdate();
-
- kapp->processEvents(10);
-
- i++;
-
+ ++i;
++dit;
}
@@ -1956,8 +1945,6 @@
for ( it = entryList.constBegin(); it != entryList.constEnd() && !_stop ; ++it )
{
- kapp->processEvents(100);
-
if( _stop ) return false;
if((*it)=="." || (*it)=="..")
@@ -2059,8 +2046,6 @@
for ( it = entryList.constBegin(); it != entryList.constEnd(); ++it )
{
- kapp->processEvents(100);
-
if( _stop ) return;
if((*it)=="." || (*it)=="..")
@@ -2143,8 +2128,6 @@
for ( it = entryList.constBegin(); it != entryList.constEnd(); ++it )
{
- kapp->processEvents(100);
-
if( _stop ) return;
if((*it)=="." || (*it)=="..")
@@ -2237,7 +2220,6 @@
void CatalogManagerView::directoryChanged(const QString& dir)
{
pause(true);
- _dirWatch->stopScan();
QString relDir, relDirPo, relDirPot;
if(dir.startsWith(_settings.poBaseDir))
@@ -2326,7 +2308,6 @@
updateDir(relDir);
}
- _dirWatch->startScan();
pause(false);
}
@@ -2334,7 +2315,6 @@
void CatalogManagerView::directoryDeleted(const QString& dir)
{
pause(true);
- _dirWatch->stopScan();
QString relDir, relDirPo, relDirPot;
if(dir.startsWith(_settings.poBaseDir))
@@ -2432,7 +2412,6 @@
}
}
- _dirWatch->startScan();
pause(false);
}
|