Summary: | kwrite/kate crashes randomly after save | ||
---|---|---|---|
Product: | [Applications] kate | Reporter: | Thanos Leontaris <aleontar> |
Component: | kwrite | Assignee: | Dirk Mueller <mueller> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | gweber, halopez, hkBst, illogical1, joachim.eibl, laiil, pje110, r78v10a07, stefan.nikolaus, tais.hansen, vkrevs |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Attachments: |
Remove deleted subentries from parent entries in KDirWatch
Slightly modified version of Hamish Rodda's patch |
Description
Thanos Leontaris
2006-03-09 04:18:34 UTC
We need a backtrace, or detailed information about how to reproduce. Otherwise this report does not help at all (and thus is invalid) :( I am now running KDE 3.5.2 with qt 3.3.6 and glibc 2.3.5-r2 all with gentoo ebuilds and gcc 3.4.5 compiler. KDE and qt were compiled with "-fPIC -march=pentium-m -fomit-frame-pointer -O3". Are the above versions well matched? Unfortunately since I use the machine for work I cannot compile KDE with debug information. In KDE 3.5.1 the problem was quite bad. In KDE 3.5.2 I only had one crash during saving without losing any data. So I am sticking for the timing being and not downgrading to 3.5.0. After installing kdelibs-3.5.2-r2 in gentoo the problem seems to have disappeared. "-r2" applies 5 patches (pasted from the ebuild): PATCHES="${FILESDIR}/${PN}-3.5.0-bindnow.patch ${FILESDIR}/${PN}-3.5.0-kicker-crash.patch ${FILESDIR}/${P}-xorg7-rgbtxt.patch ${FILESDIR}/kdelibs-3.5.2-kio-errror-handling.diff ${FILESDIR}/kdelibs-3.5.2-kate-fixes.diff" it seems that the first or last two did the trick. *** glibc detected *** corrupted double-linked list: 0x083ec420 *** KCrash: Application 'kwrite' crashing... [2]+ Exit 253 kwrite kwrite just crashed still kate hasn't crashed yet... > Going from KDE 3.5.0 to KDE 3.5.1 in gentoo unstable (~x86) makes > kwrite/kate unusable since they crash randomly when saving. In one instance > I lost data and recovered it through the ~ backup. What do you mean by "lost data". Was the saved file truncated, like described in bug #120999 (http://bugs.kde.org/show_bug.cgi?id=120999) ? Yes it was indeed truncated. The ~ backup saved me in all these cases. With KDE 3.5.2 only kwrite has crashed so far. Kate seems stable... FYI I run now kdelibs-3.5.2-r3 and kdebase-3.5.2-r1 *** Bug 120999 has been marked as a duplicate of this bug. *** I experience this bug many times a day. I'm using Fedora Core 4 with the kde-redhat rpms. The bug just started happening for me after I yum updated to 3.5.2-1.6.fc4.kde (I forgot what version I updated from). My backtrace is useless (no debug symbols). This comment is intended to make people more aware of this bug and hopefully someone with debug symbols will give a meaningful backtrace. For me the situation has changed a bit: kwrite still crashes, but kate and kdevelop even after heavy and long use stay rock-solid Isn't kate and kdevelop supposed to be built on top of the same text editing infrastructure with kwrite? (using kdelibs-3.5.2-r4 and kdebase-3.5.2-r1 in gentoo) We need a backtrace. Here's a partial backtrace. The bug consistently happens when I modify a document via another editor (in my case, CVS modifies the file after a commit), reload that document in kate, change the document in kate, then save the document in kate. I'm using KDE-3.5.2. (no debugging symbols found) Using host libthread_db library "/lib/libthread_db.so.1". (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) [Thread debugging using libthread_db enabled] [New Thread -1208191296 (LWP 11283)] (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) [KCrash handler] #6 0x05aad7af in operator== () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #7 0x06239398 in KDirWatchPrivate::slotActivated () from /usr/lib/libkio.so.4 #8 0x0623adad in KDirWatchPrivate::qt_invoke () from /usr/lib/libkio.so.4 #9 0x057a4b14 in QObject::activate_signal () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #10 0x057a513a in QObject::activate_signal () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #11 0x05b1e3f6 in QSocketNotifier::activated () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #12 0x057c4435 in QSocketNotifier::event () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #13 0x0573fb8d in QApplication::internalNotify () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #14 0x057404dc in QApplication::notify () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #15 0x00b9eecd in KApplication::notify () from /usr/lib/libkdecore.so.4 #16 0x05733619 in QEventLoop::activateSocketNotifiers () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #17 0x056e87ea in QEventLoop::processEvents () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #18 0x0575820b in QEventLoop::enterLoop () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #19 0x0573f57f in QApplication::enter_loop () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #20 0x061a24fb in KIO::NetAccess::enter_loop () from /usr/lib/libkio.so.4 #21 0x061ffc70 in KIO::NetAccess::filecopyInternal () from /usr/lib/libkio.so.4 #22 0x06215ea7 in KIO::NetAccess::file_copy () from /usr/lib/libkio.so.4 #23 0x00e9c5ec in KateDocument::save () from /usr/lib/kde3/libkatepart.so #24 0x00e7fbfa in KateView::save () from /usr/lib/kde3/libkatepart.so #25 0x00f3a016 in KateView::qt_invoke () from /usr/lib/kde3/libkatepart.so #26 0x057a4b14 in QObject::activate_signal () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #27 0x057a4fca in QObject::activate_signal () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #28 0x05e938f7 in KAction::activated () from /usr/lib/libkdeui.so.4 #29 0x05ec96c4 in KAction::slotActivated () from /usr/lib/libkdeui.so.4 #30 0x05ee5099 in KAction::qt_invoke () from /usr/lib/libkdeui.so.4 #31 0x057a4b14 in QObject::activate_signal () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #32 0x057a4fca in QObject::activate_signal () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #33 0x00ae55c5 in KAccelPrivate::menuItemActivated () from /usr/lib/libkdecore.so.4 #34 0x00b1ccfa in KAccelPrivate::emitActivatedSignal () from /usr/lib/libkdecore.so.4 #35 0x00b77aed in KAccelPrivate::eventFilter () from /usr/lib/libkdecore.so.4 #36 0x057a459c in QObject::activate_filters () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #37 0x057a4611 in QObject::event () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #38 0x057e27f0 in QWidget::event () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #39 0x058a8860 in QMainWindow::event () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #40 0x0779dbc4 in KateMainWindow::event () from /usr/lib/libkateinterfaces.so.0 #41 0x0573fb8d in QApplication::internalNotify () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #42 0x057407e9 in QApplication::notify () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #43 0x00b9eecd in KApplication::notify () from /usr/lib/libkdecore.so.4 #44 0x00b1cabf in KAccelEventHandler::x11Event () from /usr/lib/libkdecore.so.4 #45 0x00b9d4be in KApplication::x11EventFilter () from /usr/lib/libkdecore.so.4 #46 0x056c6ca1 in qt_set_x11_event_filter () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #47 0x056d3803 in QApplication::x11ProcessEvent () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #48 0x056e84b8 in QEventLoop::processEvents () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #49 0x057581f2 in QEventLoop::enterLoop () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #50 0x05758116 in QEventLoop::exec () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #51 0x0573f559 in QApplication::exec () from /usr/lib/qt-3.3/lib/libqt-mt.so.3 #52 0x006bfdd6 in kdemain () from /usr/lib/libkdeinit_kate.so #53 0x0044cd7f in __libc_start_main () from /lib/libc.so.6 #54 0x080483e1 in ?? () I've been plagued by this bug as well with kde-3.5.2 and now also 3.5.3. It affects Quanta and KDevelop as well, probably because of katepart. It's really easy to reproduce on my box. (Slackware 10.2, gcc-3.3.6, qt-3.3.4) Create a file with some content. Ie. ---[snip]--- # Hello world. # $Id$ echo "Hello wirld!" ---[snip]--- Add it to svn and set svn:keywords: svn add test.sh svn propset svn:keywords Id test.sh svn commit test.sh Kate will popup a requester saying the file changed; Status on Disk is "Created". Reload the file, and ie. correct the echo-line from "wirld" to "world" and save. Kate crashes with a "Copy File(s) Progress" dialog open, making a backup file. Any changes are lost. I haven't been able to reproduce this without svn. Manually editing the file or moving it around doesn't seem to affect kate the same way. The "modified files" dialog's Status on Disk field in those cases are "Modified" or "Deleted". It only seems to happen when kate thinks the file was "Created". Backtrace (using backup files): Using host libthread_db library "/lib/tls/libthread_db.so.1". [Thread debugging using libthread_db enabled] [New Thread -1242974496 (LWP 1465)] [KCrash handler] #5 0xb7145d99 in operator== () from /usr/lib/qt/lib/libqt-mt.so.3 #6 0xb7a988e1 in KDirWatchPrivate::slotActivated () from /opt/kde/lib/libkio.so.4 #7 0xb7a9c31f in KDirWatchPrivate::qt_invoke () from /opt/kde/lib/libkio.so.4 #8 0xb6e671ec in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #9 0xb6e6734d in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #10 0xb718af22 in QSocketNotifier::activated () from /usr/lib/qt/lib/libqt-mt.so.3 #11 0xb6e839c0 in QSocketNotifier::event () from /usr/lib/qt/lib/libqt-mt.so.3 #12 0xb6e0a95f in QApplication::internalNotify () from /usr/lib/qt/lib/libqt-mt.so.3 #13 0xb6e09f5e in QApplication::notify () from /usr/lib/qt/lib/libqt-mt.so.3 #14 0xb74476b5 in KApplication::notify () from /opt/kde/lib/libkdecore.so.4 #15 0xb6dfa36a in QEventLoop::activateSocketNotifiers () from /usr/lib/qt/lib/libqt-mt.so.3 #16 0xb6db48b3 in QEventLoop::processEvents () from /usr/lib/qt/lib/libqt-mt.so.3 #17 0xb6e1cd18 in QEventLoop::enterLoop () from /usr/lib/qt/lib/libqt-mt.so.3 #18 0xb6e0ac11 in QApplication::enter_loop () from /usr/lib/qt/lib/libqt-mt.so.3 #19 0xb7a5cf83 in KIO::NetAccess::enter_loop () from /opt/kde/lib/libkio.so.4 #20 0xb7a5c263 in KIO::NetAccess::filecopyInternal () from /opt/kde/lib/libkio.so.4 #21 0xb7a5a9a0 in KIO::NetAccess::file_copy () from /opt/kde/lib/libkio.so.4 #22 0xb5cc564f in KateDocument::save () from /opt/kde/lib/kde3/libkatepart.so #23 0xb5d07c11 in KateView::save () from /opt/kde/lib/kde3/libkatepart.so #24 0xb5cfe1f9 in KateView::qt_invoke () from /opt/kde/lib/kde3/libkatepart.so #25 0xb6e671ec in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #26 0xb6e67014 in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #27 0xb7739d4b in KAction::activated () from /opt/kde/lib/libkdeui.so.4 #28 0xb77394ba in KAction::slotActivated () from /opt/kde/lib/libkdeui.so.4 #29 0xb773a043 in KAction::qt_invoke () from /opt/kde/lib/libkdeui.so.4 #30 0xb6e671ec in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #31 0xb6e67014 in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #32 0xb74df62b in KAccelPrivate::menuItemActivated () from /opt/kde/lib/libkdecore.so.4 #33 0xb74ddef9 in KAccelPrivate::emitActivatedSignal () from /opt/kde/lib/libkdecore.so.4 #34 0xb74ddc96 in KAccelPrivate::eventFilter () from /opt/kde/lib/libkdecore.so.4 #35 0xb6e64b1e in QObject::activate_filters () from /usr/lib/qt/lib/libqt-mt.so.3 #36 0xb6e64a4c in QObject::event () from /usr/lib/qt/lib/libqt-mt.so.3 #37 0xb6e9d56f in QWidget::event () from /usr/lib/qt/lib/libqt-mt.so.3 #38 0xb6f5c132 in QMainWindow::event () from /usr/lib/qt/lib/libqt-mt.so.3 #39 0xb7eaf80c in KateMainWindow::event () from /opt/kde/lib/libkateinterfaces.so.0 #40 0xb6e0a95f in QApplication::internalNotify () from /usr/lib/qt/lib/libqt-mt.so.3 #41 0xb6e0a454 in QApplication::notify () from /usr/lib/qt/lib/libqt-mt.so.3 #42 0xb74476b5 in KApplication::notify () from /opt/kde/lib/libkdecore.so.4 #43 0xb74dccab in KAccelEventHandler::x11Event () from /opt/kde/lib/libkdecore.so.4 #44 0xb744d7df in KApplication::x11EventFilter () from /opt/kde/lib/libkdecore.so.4 #45 0xb6d940b8 in qt_set_x11_event_filter () from /usr/lib/qt/lib/libqt-mt.so.3 #46 0xb6d9dd9b in QApplication::x11ProcessEvent () from /usr/lib/qt/lib/libqt-mt.so.3 #47 0xb6db4e54 in QEventLoop::processEvents () from /usr/lib/qt/lib/libqt-mt.so.3 #48 0xb6e1cd18 in QEventLoop::enterLoop () from /usr/lib/qt/lib/libqt-mt.so.3 #49 0xb6e1cbc8 in QEventLoop::exec () from /usr/lib/qt/lib/libqt-mt.so.3 #50 0xb6e0abb1 in QApplication::exec () from /usr/lib/qt/lib/libqt-mt.so.3 #51 0xb7f073f8 in kdemain () from /opt/kde/lib/libkdeinit_kate.so #52 0x0804876b in main () Backtrace (without backup files): Using host libthread_db library "/lib/tls/libthread_db.so.1". [Thread debugging using libthread_db enabled] [New Thread -1242880288 (LWP 1527)] [KCrash handler] #5 0xb715cd99 in operator== () from /usr/lib/qt/lib/libqt-mt.so.3 #6 0xb7aaf8e1 in KDirWatchPrivate::slotActivated () from /opt/kde/lib/libkio.so.4 #7 0xb7ab331f in KDirWatchPrivate::qt_invoke () from /opt/kde/lib/libkio.so.4 #8 0xb6e7e1ec in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #9 0xb6e7e34d in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #10 0xb71a1f22 in QSocketNotifier::activated () from /usr/lib/qt/lib/libqt-mt.so.3 #11 0xb6e9a9c0 in QSocketNotifier::event () from /usr/lib/qt/lib/libqt-mt.so.3 #12 0xb6e2195f in QApplication::internalNotify () from /usr/lib/qt/lib/libqt-mt.so.3 #13 0xb6e20f5e in QApplication::notify () from /usr/lib/qt/lib/libqt-mt.so.3 #14 0xb745e6b5 in KApplication::notify () from /opt/kde/lib/libkdecore.so.4 #15 0xb6e1136a in QEventLoop::activateSocketNotifiers () from /usr/lib/qt/lib/libqt-mt.so.3 #16 0xb6dcb8b3 in QEventLoop::processEvents () from /usr/lib/qt/lib/libqt-mt.so.3 #17 0xb6e33d18 in QEventLoop::enterLoop () from /usr/lib/qt/lib/libqt-mt.so.3 #18 0xb6e33bc8 in QEventLoop::exec () from /usr/lib/qt/lib/libqt-mt.so.3 #19 0xb6e21bb1 in QApplication::exec () from /usr/lib/qt/lib/libqt-mt.so.3 #20 0xb7f1e3f8 in kdemain () from /opt/kde/lib/libkdeinit_kate.so #21 0x0804876b in main () I just tried something else. Hitting ignore on changed files and using F5 to reload the file allowed me to make multiple change, save, commit passes. But the fifth time or so I tried, Kate crashed as soon as I committed the file in a konsole shell, not showing the usual "modified files" dialog. Just a thought. I'm using kernel 2.6.16 with both INOTIFY and DNOTIFY enabled in kernel and --enable-inotify (but not dnotify) when compiling kdelibs. I'm not sure if it has anything to do with this issue though. Backtrace: Using host libthread_db library "/lib/tls/libthread_db.so.1". [Thread debugging using libthread_db enabled] [New Thread -1242929440 (LWP 1608)] [KCrash handler] #5 0xb7150d99 in operator== () from /usr/lib/qt/lib/libqt-mt.so.3 #6 0xb7aa38e1 in KDirWatchPrivate::slotActivated () from /opt/kde/lib/libkio.so.4 #7 0xb7aa731f in KDirWatchPrivate::qt_invoke () from /opt/kde/lib/libkio.so.4 #8 0xb6e721ec in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #9 0xb6e7234d in QObject::activate_signal () from /usr/lib/qt/lib/libqt-mt.so.3 #10 0xb7195f22 in QSocketNotifier::activated () from /usr/lib/qt/lib/libqt-mt.so.3 #11 0xb6e8e9c0 in QSocketNotifier::event () from /usr/lib/qt/lib/libqt-mt.so.3 #12 0xb6e1595f in QApplication::internalNotify () from /usr/lib/qt/lib/libqt-mt.so.3 #13 0xb6e14f5e in QApplication::notify () from /usr/lib/qt/lib/libqt-mt.so.3 #14 0xb74526b5 in KApplication::notify () from /opt/kde/lib/libkdecore.so.4 #15 0xb6e0536a in QEventLoop::activateSocketNotifiers () from /usr/lib/qt/lib/libqt-mt.so.3 #16 0xb6dbf8b3 in QEventLoop::processEvents () from /usr/lib/qt/lib/libqt-mt.so.3 #17 0xb6e27d18 in QEventLoop::enterLoop () from /usr/lib/qt/lib/libqt-mt.so.3 #18 0xb6e27bc8 in QEventLoop::exec () from /usr/lib/qt/lib/libqt-mt.so.3 #19 0xb6e15bb1 in QApplication::exec () from /usr/lib/qt/lib/libqt-mt.so.3 #20 0xb7f123f8 in kdemain () from /opt/kde/lib/libkdeinit_kate.so #21 0x0804876b in main () Here's the real story: ==25242== Invalid read of size 8 ==25242== at 0x7736410: operator==(QString const&, QString const&) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x5BB1586: KDirWatchPrivate::slotActivated() (kdirwatch.cpp:439) ==25242== by 0x5BB176A: KDirWatchPrivate::qt_invoke(int, QUObject*) (kdirwatch_p.moc:90) ==25242== by 0x74B07AB: QObject::activate_signal(QConnectionList*, QUObject*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x74B13EE: QObject::activate_signal(int, int) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x74CB04A: QSocketNotifier::event(QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x7459984: QApplication::internalNotify(QObject*, QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x745A5B6: QApplication::notify(QObject*, QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x67946E4: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550) ==25242== by 0x744F97B: QEventLoop::activateSocketNotifiers() (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x741040F: QEventLoop::processEvents(unsigned) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x746E6A0: QEventLoop::enterLoop() (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x5B79670: KIO::NetAccess::enter_loop() (netaccess.cpp:498) ==25242== by 0x5B79C5C: KIO::NetAccess::filecopyInternal(KURL const&, KURL const&, int, bool, bool, QWidget*, bool) (netaccess.cpp:316) ==25242== by 0x5B7A217: KIO::NetAccess::file_copy(KURL const&, KURL const&, int, bool, bool, QWidget*) (netaccess.cpp:127) ==25242== by 0xA98F920: KateDocument::save() (katedocument.cpp:2464) ==25242== by 0xA9CB21D: KateView::save() (kateview.cpp:850) ==25242== by 0x4CC47DD: KateDocManager::saveAll() (katedocmanager.cpp:443) ==25242== by 0x4CC5A70: KateDocManager::qt_invoke(int, QUObject*) (katedocmanager.moc:151) ==25242== by 0x74B07AB: QObject::activate_signal(QConnectionList*, QUObject*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x74B14C2: QObject::activate_signal(int) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x60D3201: KAction::activated() (kaction.moc:176) ==25242== by 0x60D3924: KAction::slotActivated() (kaction.cpp:1102) ==25242== by 0x60D3EE8: KAction::qt_invoke(int, QUObject*) (kaction.moc:218) ==25242== by 0x74B07AB: QObject::activate_signal(QConnectionList*, QUObject*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x74B14C2: QObject::activate_signal(int) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x680BB1D: KAccelPrivate::menuItemActivated() (kaccelprivate.moc:110) ==25242== by 0x680CE6E: KAccelPrivate::emitActivatedSignal(KAccelAction*) (kaccel.cpp:400) ==25242== by 0x680D4D1: KAccelPrivate::eventFilter(QObject*, QEvent*) (kaccel.cpp:370) ==25242== by 0x74B01B1: QObject::activate_filters(QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x74B0206: QObject::event(QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x74E32C7: QWidget::event(QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== Address 0x9B5C8D8 is 168 bytes inside a block of size 208 free'd ==25242== at 0x4A1FFEF: operator delete(void*) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so) ==25242== by 0x5BB3AAE: QMapPrivate<QString, KDirWatchPrivate::Entry>::remove(QMapIterator<QString, KDirWatchPrivate::Entry>) (qmap.h:386) ==25242== by 0x5BB3B36: QMap<QString, KDirWatchPrivate::Entry>::remove(QString const&) (qmap.h:834) ==25242== by 0x5BAF58F: KDirWatchPrivate::removeEntry(KDirWatch*, QString const&, KDirWatchPrivate::Entry*) (kdirwatch.cpp:973) ==25242== by 0x5BAF5D4: KDirWatch::removeFile(QString const&) (kdirwatch.cpp:1638) ==25242== by 0xA98E758: KateDocument::deactivateDirWatch() (katedocument.cpp:2669) ==25242== by 0xA99B3C9: KateDocument::closeURL() (katedocument.cpp:2701) ==25242== by 0xA98FCF3: KateDocument::openURL(KURL const&) (katedocument.cpp:2204) ==25242== by 0xA99044A: KateDocument::reloadFile() (katedocument.cpp:4366) ==25242== by 0xA98C954: KateDocument::slotModifiedOnDisk(Kate::View*) (katedocument.cpp:4280) ==25242== by 0xA9A0C68: KateDocument::qt_invoke(int, QUObject*) (katedocument.moc:1156) ==25242== by 0x74B070F: QObject::activate_signal(QConnectionList*, QUObject*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0xA9D39A9: KateView::gotFocus(Kate::View*) (kateview.moc:663) ==25242== by 0xA9F11A6: KateViewInternal::focusInEvent(QFocusEvent*) (kateviewinternal.cpp:2928) ==25242== by 0x74E359E: QWidget::event(QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x7459984: QApplication::internalNotify(QObject*, QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x745A5B6: QApplication::notify(QObject*, QEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x67946E4: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550) ==25242== by 0x74E30C9: QWidget::setFocus() (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x745DA38: QApplication::setActiveWindow(QWidget*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x7401688: QApplication::x11ProcessEvent(_XEvent*) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x741022E: QEventLoop::processEvents(unsigned) (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x746E6A0: QEventLoop::enterLoop() (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x746E549: QEventLoop::exec() (in /usr/lib/qt3/lib64/libqt-mt.so.3.3.5) ==25242== by 0x4B2A76C: kdemain (katemain.cpp:253) ==25242== by 0x4008B2: main (kdeinit_kate.cpp:2) However I think this might be a KDirWatch bug... will look further... Maybe bug 119435 has something to do with this one.??? Created attachment 16556 [details]
Remove deleted subentries from parent entries in KDirWatch
Here's the patch which addresses the problem as demonstrated by Valgrind. I'm
pretty sure this is due to KDirWatch, but I don't know why it only appeared
after inotify support was added, it seems as if FAM would trigger this bug too.
Please test, if others can confirm I'll reassign to kdirwatch.
Created attachment 16568 [details]
Slightly modified version of Hamish Rodda's patch
So far, I haven't been able to provoke any crashes with this patch. Good job!
I had to add a class method declaration to your patch though for kdelibs to
compile without complaining.
looking hmm, I'm not that happy with the patch, because the subentries should be removed as part of the removeEntry call already. Its more that the logic seems to be forgetting to do that when the entry is no longer watched. this doesn't seem inotify specific. I'll keep chasing it this evening. *** Bug 129810 has been marked as a duplicate of this bug. *** The patch is about removing the entity which is being deleted from it's parent's list of subentries. I believe this patch is right, and I agree that it isn't inotify specific (which is why I've patched other parts of code too) *** Bug 127295 has been marked as a duplicate of this bug. *** SVN commit 555364 by mueller: Inotify looks nice at the first glance, but gets really really ugly if you try to keep it behaviour-compatible with stat() code ;( BUG:123315 M +47 -22 kdirwatch.cpp --- branches/KDE/3.5/kdelibs/kio/kio/kdirwatch.cpp #555363:555364 @@ -407,9 +407,6 @@ if ( event->len ) path = QFile::decodeName( QCString( event->name, event->len ) ); - if ( event->mask & IN_IGNORED ) - continue; - if ( path.length() && isNoisyFile( path.latin1() ) ) continue; @@ -428,12 +425,15 @@ if( event->mask & IN_DELETE_SELF) { kdDebug(7001) << "-->got deleteself signal for " << e->path << endl; e->m_status = NonExistent; - //(void) inotify_rm_watch( m_inotify_fd, e->wd ); - addEntry(0, QDir::cleanDirPath(e->path+"/.."), e, true); + if (e->isDir) + addEntry(0, QDir::cleanDirPath(e->path+"/.."), e, true); + else + addEntry(0, QFileInfo(e->path).dirPath(true), e, true); } + if ( event->mask & IN_IGNORED ) { + e->wd = 0; + } if ( event->mask & (IN_CREATE|IN_MOVED_TO) ) { - kdDebug(7001) << "-->got new subfile " << path << " in " << e->path << endl; - Entry *sub_entry = e->m_entries.first(); for(;sub_entry; sub_entry = e->m_entries.next()) if (sub_entry->path == e->path + "/" + path) break; @@ -727,7 +727,10 @@ return true; if ( e->m_status == NonExistent ) { - addEntry(0, QDir::cleanDirPath(e->path+"/.."), e, true); + if (e->isDir) + addEntry(0, QDir::cleanDirPath(e->path+"/.."), e, true); + else + addEntry(0, QFileInfo(e->path).dirPath(true), e, true); return true; } @@ -782,6 +785,7 @@ (*it).m_entries.append(sub_entry); kdDebug(7001) << "Added already watched Entry " << path << " (for " << sub_entry->path << ")" << endl; + #ifdef HAVE_DNOTIFY Entry* e = &(*it); if( (e->m_mode == DNotifyMode) && (e->dn_fd > 0) ) { @@ -798,6 +802,21 @@ } } #endif + +#ifdef HAVE_INOTIFY + Entry* e = &(*it); + if( (e->m_mode == INotifyMode) && (e->wd > 0) ) { + int mask = IN_DELETE|IN_DELETE_SELF|IN_CREATE|IN_MOVE|IN_MOVE_SELF|IN_DONT_FOLLOW; + if(!e->isDir) + mask |= IN_MODIFY|IN_ATTRIB; + else + mask |= IN_ONLYDIR; + + inotify_rm_watch (m_inotify_fd, e->wd); + e->wd = inotify_add_watch( m_inotify_fd, QFile::encodeName( e->path ), mask); + } +#endif + } else { (*it).addClient(instance); @@ -928,8 +947,12 @@ m_inotify_fd << ", " << e->wd << ") for " << e->path << endl; } - else - removeEntry( 0, QDir::cleanDirPath( e->path+"/.." ), e ); + else { + if (e->isDir) + removeEntry(0, QDir::cleanDirPath(e->path+"/.."), e); + else + removeEntry(0, QFileInfo(e->path).dirPath(true), e); + } } #endif @@ -1167,15 +1190,6 @@ return Changed; } -#ifdef HAVE_INOTIFY - // for inotify we delay the initial stating till the first event in it - if ( e->m_status == Normal && e->m_ctime == invalid_ctime ) - { - e->m_ctime = stat_buf.st_ctime; - e->m_nlink = stat_buf.st_nlink; - } -#endif - return NoChange; } @@ -1278,7 +1292,7 @@ // removeDir(), when called in slotDirty(), can cause a crash otherwise delayRemove = true; -#ifdef HAVE_DNOTIFY +#if defined(HAVE_DNOTIFY) || defined(HAVE_INOTIFY) QPtrList<Entry> dList, cList; #endif @@ -1306,6 +1320,16 @@ int ev = scanEntry( &(*it) ); + +#ifdef HAVE_INOTIFY + if ((*it).m_mode == INotifyMode && ev == Created && (*it).wd == 0) { + cList.append( &(*it) ); + if (! useINotify( &(*it) )) { + useStat( &(*it) ); + } + } +#endif + #ifdef HAVE_DNOTIFY if ((*it).m_mode == DNotifyMode) { if ((*it).isDir && (ev == Deleted)) { @@ -1337,7 +1361,7 @@ } -#ifdef HAVE_DNOTIFY +#if defined(HAVE_DNOTIFY) || defined(HAVE_INOTIFY) // Scan parent of deleted directories for new creation Entry* e; for(e=dList.first();e;e=dList.next()) @@ -1542,7 +1566,8 @@ kdDebug(7001) << " dependent entries:" << endl; Entry* d = e->m_entries.first(); for(;d; d = e->m_entries.next()) { - kdDebug(7001) << " " << d->path << endl; + kdDebug(7001) << " " << d << endl; + kdDebug(7001) << " " << d->path << " (" << d << ") " << endl; } } } *** Bug 130756 has been marked as a duplicate of this bug. *** *** Bug 118721 has been marked as a duplicate of this bug. *** *** Bug 118661 has been marked as a duplicate of this bug. *** *** Bug 128638 has been marked as a duplicate of this bug. *** *** Bug 128569 has been marked as a duplicate of this bug. *** *** Bug 133064 has been marked as a duplicate of this bug. *** |