Version: 3.5.1 (using KDE 4.0.83) Installed from: SuSE RPMs OS: Linux Short description says it all: kompare sometimes crashes when saving. I haven't pinned down what it comes to to reproduce it, really. After a few attempts it did work. Different files, sometimes it works straight away, sometimes it crashes once, twice, 3 times, before a successful attempt. This is happening in 3.5.1 (KDE4 beta2). I was comparing 2 local files, but is has happened as well when the source was a file on a sshfs mounted fs and the target was local. Here's the output from the crash handler: Application: Kompare (kompare), signal SIGSEGV [?1034h[Thread debugging using libthread_db enabled] [New Thread 0x7f5b4ca6b700 (LWP 20068)] [New Thread 0x40cf4950 (LWP 20070)] [KCrash handler] #5 0x00007f5b46c1c998 in QX11Info::screen () from /usr/lib64/libQtGui.so.4 #6 0x00007f5b46c14c6d in QWidgetPrivate::create_sys () from /usr/lib64/libQtGui.so.4 #7 0x00007f5b46be667c in QWidget::create () from /usr/lib64/libQtGui.so.4 #8 0x00007f5b46be7b6f in QWidget::winId () from /usr/lib64/libQtGui.so.4 #9 0x00007f5b4adb7495 in KIO::SchedulerPrivate::registerWindow () from /usr/lib64/libkio.so.5 #10 0x00007f5b4adbd384 in KIO::Scheduler::registerWindow () from /usr/lib64/libkio.so.5 #11 0x00007f5b4ada7f69 in KIO::NetAccess::filecopyInternal () from /usr/lib64/libkio.so.5 #12 0x00007f5b4ada8fdb in KIO::NetAccess::upload () from /usr/lib64/libkio.so.5 #13 0x00007f5b4c47877c in Diff2::KompareModelList::saveDestination () from /usr/lib64/libkomparediff2.so.4 #14 0x00007f5b4c478ef6 in Diff2::KompareModelList::saveAll () from /usr/lib64/libkomparediff2.so.4 #15 0x00007f5b41784d10 in KomparePart::queryClose () from /usr/lib64/kde4/libkomparepart.so #16 0x00007f5b4bd0fd74 in KMainWindow::closeEvent () from /usr/lib64/libkdeui.so.5 #17 0x00007f5b46bebd77 in QWidget::event () from /usr/lib64/libQtGui.so.4 #18 0x00007f5b46eb70fb in QMainWindow::event () from /usr/lib64/libQtGui.so.4 #19 0x00007f5b4bd487f8 in KXmlGuiWindow::event () from /usr/lib64/libkdeui.so.5 #20 0x00007f5b46b9f92d in QApplicationPrivate::notify_helper () from /usr/lib64/libQtGui.so.4 #21 0x00007f5b46ba5cfa in QApplication::notify () from /usr/lib64/libQtGui.so.4 #22 0x00007f5b4bc61d9b in KApplication::notify () from /usr/lib64/libkdeui.so.5 #23 0x00007f5b499cae9c in QCoreApplication::notifyInternal () from /usr/lib64/libQtCore.so.4 #24 0x00007f5b46bec872 in QWidgetPrivate::close_helper () from /usr/lib64/libQtGui.so.4 #25 0x00007f5b46bf0be5 in QApplication::x11ClientMessage () from /usr/lib64/libQtGui.so.4 #26 0x00007f5b46bfc831 in QApplication::x11ProcessEvent () from /usr/lib64/libQtGui.so.4 #27 0x00007f5b46c2057c in ?? () from /usr/lib64/libQtGui.so.4 #28 0x00007f5b499c97f2 in QEventLoop::processEvents () from /usr/lib64/libQtCore.so.4 #29 0x00007f5b499c9985 in QEventLoop::exec () from /usr/lib64/libQtCore.so.4 #30 0x00007f5b499cba25 in QCoreApplication::exec () from /usr/lib64/libQtCore.so.4 #31 0x000000000040a41d in main () #0 0x00007f5b453af261 in nanosleep () from /lib64/libc.so.6
Hmmm, the backtrace here is interesting. This may be related to Qt 4.4's alien widgets. What apparently happens is that Kompare calls KIO::NetAccess::upload, which is expected to handle all the uploading and return only when done. However, KIO::SchedulerPrivate::registerWindow requests a winId for a widget, which in turn causes the widget to be instantiated (by QWidget::create), and there we hit a segfault in X11-specific code. Unfortunately, the backtrace doesn't tell me more, so I'm not sure what exactly causes this.
Okay, that doesn't help me much, really, since I am not developing for KDE, but I get the idea, I think. I've heard much grumpiness about Nvidia and 2D, maybe that has something to do with it since you mentioned X11, I'm using a GT7600GT with the official nvidia driver.
In KDE3 I have noticed unexpected behaviour with KIO::NetAccess several times. Problem was always solved by using the asynchronous KIO functions. Since then I'm avoiding NetAccess.
I'm not sure this is related to this bug: it's about the KDE4 version (KDE3 kompare gives me no problems at all) and I was comparing local files.
And avoiding the function without understanding what the actual problem is is the wrong solution anyway. If the library is buggy, the library should be fixed, if the bug is in Kompare, Kompare should be fixed, but hacking around the bug is the wrong thing to do.
Any progress with this one? It's a very annoying bug. Running 4.1 now from Suse and the problem is still there. It's the only reason I have KDE3's version installed because of this, but all my other apps are 4.1 already. Did another trace today, but it's identical to the one I posted in the description. Someone... help me... Must... remove... all... kde3... :)
Sorry for posting _again_. I'm just hoping this will get fixed soon. KDE 4.1.1 (openSUSE Factory) and it's still broken. Any news on this? If it's Qt related, maybe it will be fixed with Qt 4.4.1, just like the printing dialog bug. I sure hope the openSUSE KDE devs will go to Qt 4.4.1 soon, it's been out for a few moths already.
I think this is a KIO bug, reassigning. Please bounce back if you think otherwise.
I'm not sure what that means 100%, but there is no KIO slave or anything involved. New test with 2 files test1.txt and test2.txt with just some random lines, put into /tmp. First attempt: change saved, no crash. Second attempt: change not saved, crash. Running 4.1.3 from openSUSE Factory (but it's always been crashing on me). I also started over with a new KDE4 profile, but no dice. Just tell me if I need to send this to the openSUSE KDE team instead of you guys. New backtrace in an attachment.
Created attachment 28346 [details] backtrace
kio_file is also an ioslave. Most KIO-enabled apps use KIO for all accesses, including local files. This crash is within functions of the KIO::NetAccess namespace, which is why I suspect a KIO bug. It could also be a bug in Qt or Kompare though, it's hard to tell (see also my incomplete analysis in comment #1). I don't think this is openSUSE-specific in any case, so I believe this is the correct place to report it.
The crash is in KIO, but obviously it's just calling methods on the QWidget* window provided by the call. Either that widget is invalid, or indeed the alien widget thing breaks, but all this is hard to investigate without a full debug-enabled backtrace (or valgrind log).
*** Bug 174923 has been marked as a duplicate of this bug. ***
*** Bug 177452 has been marked as a duplicate of this bug. ***
David - check my backtrace in bug #177452, it shows at the end: /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/scheduler.cpp:1018 #10 0x00007f1b791cc180 in KIO::Scheduler::registerWindow (wid=0xbe5950) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/scheduler.cpp:301 #11 0x00007f1b7914e752 in KIO::JobUiDelegate::setWindow (this=0xe0d260,
Please run kompare in valgrind so that we know why this crashes. My guess is that the widget being given to NetAccess::upload() was deleted already...
Okay, I'll attach a valgrind log. Note: kompare does not seem to crash when using valgrind, or is this caught _by_ valgrind?
Created attachment 29303 [details] valgrind log valgrind --leak-check=full --show-reachable=yes /usr/bin/kompare test test2
Well, I'll reassign it to me as David Faure thinks this is not a bug in KIO and is probably right.
*** Bug 181148 has been marked as a duplicate of this bug. ***
Created attachment 30377 [details] Backtrace of "crash on save case" 1. Open two files 2. Apply some change 3. Save
I think there is another bug (related or unrelated): "crash on exit" sometimes when you do: 1. open two files 2. apply change 3. save it didn't crash and when you follow with 4. close 5. click save on "save changes?" dialog it crash I'll try to attach valgrind log and backtrace btw. some version info openSUSE 11.1 x86_64 Qt: 4.4.3 KDE: 4.1.96 (KDE 4.1.96 (KDE 4.2 RC1)) "release 78.1" Plasma Workspace: 0.3 x11-video-nvidiaG02, Version: 180.22-4.1
That would be bug 174924 (which I just reopened).
Created attachment 30378 [details] valgrind log of "crash on close" case when i run it trough valgrind it doesn't crash
I've done another backtrace of "crash on save", there's something new here Starting program: /usr/bin/kompare test1.txt test2.txt ... [Thread debugging using libthread_db enabled] [New Thread 0x7fffeba7b950 (LWP 22034)] X Error: RenderBadPicture (invalid Picture parameter) 179 Extension: 154 (RENDER) Minor opcode: 7 (RenderFreePicture) Resource id: 0x614b60 Program received signal SIGSEGV, Segmentation fault. 0x00007ffff4fd9ffd in QWidget::palette() const () from /usr/lib64/libQtGui.so.4 (gdb) bt #0 0x00007ffff4fd9ffd in QWidget::palette() const () from /usr/lib64/libQtGui.so.4 #1 0x00007ffff50136ff in QWidgetPrivate::updateSystemBackground() () from /usr/lib64/libQtGui.so.4 ...
this one is different too, it crash on QRegion::isEmpty Program received signal SIGSEGV, Segmentation fault. 0x00007ffff50c70b0 in QRegion::isEmpty() const () from /usr/lib64/libQtGui.so.4 and some details on KIO: (gdb) bt full #0 0x00007ffff50c70b0 in QRegion::isEmpty() const () from /usr/lib64/libQtGui.so.4 No symbol table info available. #1 0x00007ffff5016492 in QWidgetPrivate::create_sys(unsigned long, bool, bool) () from /usr/lib64/libQtGui.so.4 No symbol table info available. #2 0x00007ffff4fdf0fa in QWidget::create(unsigned long, bool, bool) () from /usr/lib64/libQtGui.so.4 No symbol table info available. #3 0x00007ffff4fdf8ff in QWidget::winId() const () from /usr/lib64/libQtGui.so.4 No symbol table info available. #4 0x00007ffff67f5fc5 in KIO::SchedulerPrivate::registerWindow (this=0xee3b80, wid=<value optimized out>) at /usr/src/debug/kdelibs-4.1.96/kio/kio/scheduler.cpp:1018 windowId = <value optimized out> window = (struct QWidget *) 0x7b2fc0 #5 0x00007ffff67e6a59 in KIO::NetAccess::filecopyInternal (this=0x7fffffffbbd0, src=@0x7fffffffbbf0, target=@0x7fffffffbca0, permissions=-1, flags= {i = -17392}, window=0x7b2fc0, move=false) at /usr/src/debug/kdelibs-4.1.96/kio/kio/netaccess.cpp:320 No locals. #6 0x00007ffff67e7aeb in KIO::NetAccess::upload (src=@0x7fffffffbd40, target=@0x7fffffffbca0, window=0x7b2fc0) at /usr/src/debug/kdelibs-4.1.96/kio/kio/netaccess.cpp:142 kioNet = {<> = {<No data fields>}, static staticMetaObject = {d = {superdata = 0x7ffff4730260, stringdata = 0x7ffff68bd620 "KIO::NetAccess", data = 0x7ffff68bd720, extradata = 0x0}}, d = 0xee62a0} s = {<QUrl> = {d = 0x99a0f0}, d = 0x0} #7 0x00007ffff79c9a0d in Diff2::KompareModelList::saveDestination(Diff2::DiffModel*) () from /usr/lib64/libkomparediff2.so.4 No symbol table info available.
This backtrace one is the most often for me: Application: Kompare (kompare), signal SIGSEGV 0x00007f0d0de80df1 in nanosleep () from /lib/libc.so.6 [Current thread is 0 (LWP 32058)] Thread 2 (Thread 0x7f0d05ec7950 (LWP 32059)): #0 0x00007f0d0deb7b62 in select () from /lib/libc.so.6 #1 0x00007f0d0e5636a9 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #2 0x00007f0d0e4aac04 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #3 0x00007f0d0d1ec3da in start_thread () from /lib/libpthread.so.0 #4 0x00007f0d0debf42d in clone () from /lib/libc.so.6 #5 0x0000000000000000 in ?? () Thread 1 (Thread 0x7f0d11000750 (LWP 32058)): [KCrash Handler] #5 0x00007f0d0eeeea70 in QX11Info::screen () from /usr/lib64/qt4/libQtGui.so.4 #6 0x00007f0d0eee72d0 in QWidgetPrivate::create_sys () from /usr/lib64/qt4/libQtGui.so.4 #7 0x00007f0d0eeb746a in QWidget::create () from /usr/lib64/qt4/libQtGui.so.4 #8 0x00007f0d0eeb7b9f in QWidget::winId () from /usr/lib64/qt4/libQtGui.so.4 #9 0x00007f0d0ff46de2 in KIO::SchedulerPrivate::registerWindow (this=0x1bc7390, wid=0x1a56da0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/scheduler.cpp:1018 #10 0x00007f0d0ff477f4 in KIO::Scheduler::registerWindow (wid=0x1a56da0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/scheduler.cpp:301 #11 0x00007f0d0fec9422 in KIO::JobUiDelegate::setWindow (this=0x1bf7c00, window=0x1a56da0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/jobuidelegate.cpp:58 #12 0x00007f0d0ff37681 in KIO::NetAccess::filecopyInternal (this=0x7fff19033680, src=@0x7fff19033670, target=@0x7fff19033a00, permissions=-1, flags={i = 419641008}, window=0x1a56da0, move=false) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/netaccess.cpp:320 #13 0x00007f0d0ff37f5d in KIO::NetAccess::upload (src=@0x7fff19033a10, target=@0x7fff19033a00, window=0x1a56da0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/netaccess.cpp:142 #14 0x00007f0d06d39e0c in Diff2::KompareModelList::saveDestination (this=0x1a62f70, model=0x1b9b7b0) at /var/tmp/portage/kde-base/kompare-9999/work/kompare-9999/kompare/libdiff2/komparemodellist.cpp:388 #15 0x00007f0d06d39fd6 in Diff2::KompareModelList::slotSaveDestination (this=0x1a62f70) at /var/tmp/portage/kde-base/kompare-9999/work/kompare-9999/kompare/libdiff2/komparemodellist.cpp:294 #16 0x00007f0d06d3a345 in Diff2::KompareModelList::qt_metacall (this=0x1a62f70, _c=QMetaObject::InvokeMetaMethod, _id=26, _a=0x7fff19033be0) at /var/tmp/portage/kde-base/kompare-9999/work/kompare_build/kompare/libdiff2/komparemodellist.moc:150 #17 0x00007f0d0e592cef in QMetaObject::activate () from /usr/lib64/qt4/libQtCore.so.4 #18 0x00007f0d0ee6b685 in QAction::triggered () from /usr/lib64/qt4/libQtGui.so.4 #19 0x00007f0d0ee6bcf5 in QAction::activate () from /usr/lib64/qt4/libQtGui.so.4 #20 0x00007f0d0f14c30b in ?? () from /usr/lib64/qt4/libQtGui.so.4 #21 0x00007f0d0f14c52f in QAbstractButton::mouseReleaseEvent () from /usr/lib64/qt4/libQtGui.so.4 #22 0x00007f0d0f2000b0 in QToolButton::mouseReleaseEvent () from /usr/lib64/qt4/libQtGui.so.4 #23 0x00007f0d0eeb9861 in QWidget::event () from /usr/lib64/qt4/libQtGui.so.4 #24 0x00007f0d0ee705c5 in QApplicationPrivate::notify_helper () from /usr/lib64/qt4/libQtGui.so.4 #25 0x00007f0d0ee77f00 in QApplication::notify () from /usr/lib64/qt4/libQtGui.so.4 #26 0x00007f0d0f9ac1c0 in KApplication::notify (this=0x7fff19035230, receiver=0x1b0dbd0, event=0x7fff19034530) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kdeui/kernel/kapplication.cpp:307 #27 0x00007f0d0e580e45 in QCoreApplication::notifyInternal () from /usr/lib64/qt4/libQtCore.so.4 #28 0x00007f0d0ee7698a in QApplicationPrivate::sendMouseEvent () from /usr/lib64/qt4/libQtGui.so.4 #29 0x00007f0d0eed0ff5 in ?? () from /usr/lib64/qt4/libQtGui.so.4 #30 0x00007f0d0eecfb68 in QApplication::x11ProcessEvent () from /usr/lib64/qt4/libQtGui.so.4 #31 0x00007f0d0eef284b in ?? () from /usr/lib64/qt4/libQtGui.so.4 #32 0x00007f0d0afdb156 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #33 0x00007f0d0afde345 in ?? () from /usr/lib/libglib-2.0.so.0 #34 0x00007f0d0afde557 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #35 0x00007f0d0e5a4f49 in QEventDispatcherGlib::processEvents () from /usr/lib64/qt4/libQtCore.so.4 #36 0x00007f0d0eef20f6 in ?? () from /usr/lib64/qt4/libQtGui.so.4 #37 0x00007f0d0e57faf4 in QEventLoop::processEvents () from /usr/lib64/qt4/libQtCore.so.4 #38 0x00007f0d0e57fc72 in QEventLoop::exec () from /usr/lib64/qt4/libQtCore.so.4 #39 0x00007f0d0e581bef in QCoreApplication::exec () from /usr/lib64/qt4/libQtCore.so.4 #40 0x000000000040b983 in main (argc=3, argv=0x7fff19035c88) at /var/tmp/portage/kde-base/kompare-9999/work/kompare-9999/kompare/main.cpp:233
This bug has been reproduced by me in trunk (for quite long time).
Confirming. It's pretty obvious from the feedback that this bug is valid. :-)
SVN commit 928082 by bruggie: BUG: 165421 Actually give a QWidget* wehn asked for one and not cast a QObject* to a QWidget*, that does not work... BUG: 174924 Most likely fixed as well due to removing the "delete this" which is pure evil BUG: 103651 A missing KGlobal::deref() seems to have caused kompare to stay around without visible windows. BUG: 102800 Same for this one, due to the missing deref kompare never fully quit and the session was saved and restored on next login. Many many cleanups and many dialog created on the heap are not created on the stack whereever possible. Updated most headers with the updated copyright year and a new email address. Next time i'll try to split it up in seperate commits. M +34 -30 kompare_shell.cpp M +7 -3 komparenavtreepart/komparenavtreepart.cpp M +9 -9 komparepart/kompare_part.cpp M +2 -2 komparepart/kompare_part.h M +3 -0 komparepart/kompareconnectwidget.cpp M +36 -16 komparepart/komparelistview.cpp M +12 -1 komparepart/komparelistview.h M +1 -3 kompareurldialog.cpp M +3 -1 libdiff2/difference.cpp M +5 -2 libdiff2/difference.h M +2 -1 libdiff2/diffhunk.cpp M +2 -2 libdiff2/diffhunk.h M +4 -29 libdiff2/diffmodel.cpp M +3 -6 libdiff2/diffmodel.h M +1 -1 libdiff2/diffmodellist.cpp M +4 -2 libdiff2/diffmodellist.h M +28 -25 libdiff2/komparemodellist.cpp M +3 -1 libdiff2/komparemodellist.h M +2 -1 libdiff2/kompareprocess.cpp M +5 -1 libdiff2/parserbase.cpp M +22 -27 main.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=928082
Cool. Thanks a lot! It's the only KDE3 app I still use. Well, Amarok 1.4 as well, but with this bug fixed would mean I can get rid of kde3-sdk. :) So, will these fixes be in 4.2.1? Thanks again!
I'll backport all of bruggie's bugfixes as well as my Qt 4.5 fix ASAP, it should make it into 4.2.1.
SVN commit 928150 by kkofler: Mass backport of Kompare bugfixes for KDE 4.2.1 (should not touch any translatable strings): backport revisions 913308, 913309, 922431 (Kompare only), 924527, 924539, 924540, 924880, 924959, 924960, 925266, 926028, 926131, 926143, 926225, 928082 (minus i18n string changes), 928141, 928146 from trunk. CCBUG: 176804 CCBUG: 169692 CCBUG: 182792 CCBUG: 176797 CCBUG: 175251 CCBUG: 75794 CCBUG: 89781 CCBUG: 145956 CCBUG: 107489 CCBUG: 165421 CCBUG: 174924 CCBUG: 103651 CCBUG: 102800 CCMAIL: bruggie@gmail.com Bump Kompare version from 3.5.2 to 3.5.3 (trunk is 4.0.0). Tested on Fedora 9 i386, KDE 4.2.0. Note: skipped revision 926198 because it introduces a string and #124121 is more a user error than a bug anyway. M +34 -30 kompare_shell.cpp M +18 -3 komparenavtreepart/komparenavtreepart.cpp M +15 -12 komparepart/kompare_part.cpp M +2 -2 komparepart/kompare_part.h M +9 -6 komparepart/kompareconnectwidget.cpp M +80 -31 komparepart/komparelistview.cpp M +26 -5 komparepart/komparelistview.h M +2 -2 komparepart/kompareprefdlg.cpp M +4 -1 komparepart/kompareprefdlg.h M +1 -1 komparepart/komparesplitter.cpp M +2 -1 libdialogpages/diffpage.cpp M +4 -3 libdialogpages/diffpage.h M +14 -4 libdialogpages/filespage.cpp M +4 -4 libdialogpages/filespage.h M +10 -8 libdiff2/difference.cpp M +5 -2 libdiff2/difference.h M +2 -1 libdiff2/diffhunk.cpp M +2 -2 libdiff2/diffhunk.h M +5 -30 libdiff2/diffmodel.cpp M +3 -6 libdiff2/diffmodel.h M +1 -1 libdiff2/diffmodellist.cpp M +4 -2 libdiff2/diffmodellist.h M +34 -31 libdiff2/komparemodellist.cpp M +3 -1 libdiff2/komparemodellist.h M +2 -1 libdiff2/kompareprocess.cpp M +53 -17 libdiff2/levenshteintable.cpp M +5 -1 libdiff2/parserbase.cpp M +21 -26 main.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=928150