I have selected the 2.9 pre-alpha but i'm actually on the new 2.9 branch on git. Opening an image, changing opengl settings then closing it and then opening a new one leads to a crash. Reproducible: Always Steps to Reproduce: 1. Open an image 2. Change Opengl settings in Configure Krita (doesn't matter which ones) 3. Close the image (doesn't matter if with File->Close or Ctrl-W) 5. Open a new one Actual Results: Krita crashed with segfault. Expected Results: Open the new image without crashing :D. Here's the backtrace: https://paste.kde.org/pgqipjtf7
That looks like a new crash after Dmitry's input manager fix this afternoon. Dmitry, can you take a look?
Ok what happens is that d->eventsReceiver (on the last line of the backtrace) holds the old canvas. This is what happens: 1) Open image, eventsReceiver = CanvasA 2) Change Opengl settings changed, eventsReceiver are still = CanvasA (that is destroyed), but the image has actually a new CanvasB 3) Close image, the removeCanvas in the input manager doesn't null eventsReceiver because CanvasA != CanvasB (there's a check). 4) Open a new image, addCanvas->setupAsEventFilter sees that eventsReceiver is still set to something (CanvasA, even if destroyed), tries to access it and.. crash :).
I could reproduce this, but I had to switch on/off opengl itself: KCrash Handler] #5 0x00007f89c78df16b in QObject::removeEventFilter(QObject*) (this=0x2d44a00) at ../../src/corelib/tools/qlist.h:98 #6 0x00007f89c78df16b in QObject::removeEventFilter(QObject*) (this=0x2d44a00) at ../../src/corelib/tools/qlist.h:280 #7 0x00007f89c78df16b in QObject::removeEventFilter(QObject*) (this=0x4f5fc40, obj=obj@entry=0x26e60f0) at kernel/qobject.cpp:2079 #8 0x00007f89ceb3e3c1 in KisInputManager::setupAsEventFilter(QObject*) (this=0x26e60f0, receiver=receiver@entry=0x11ed24c0) at /home/boud/kde/src/2.9/krita/ui/input/kis_input_manager.cpp:554 #9 0x00007f89ceb3e80c in KisInputManager::addTrackedCanvas(KisCanvas2*) (canvas=0xd4a7b50, this=0x26eb160) at /home/boud/kde/src/2.9/krita/ui/input/kis_input_manager.cpp:172 #10 0x00007f89ceb3e80c in KisInputManager::addTrackedCanvas(KisCanvas2*) (this=<optimized out>, canvas=0xd4a7b50) at /home/boud/kde/src/2.9/krita/ui/input/kis_input_manager.cpp:518 #11 0x00007f89cec014a0 in KisViewManager::slotViewAdded(KisView*) (this=this@entry=0x269f060, view=<optimized out>) at /home/boud/kde/src/2.9/krita/ui/KisViewManager.cpp:429 #12 0x00007f89cec06c00 in KisViewManager::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x269f060, _c=<optimized out>, _id=5, _a=0x7fff117f54c0) at /home/boud/kde/build/2.9/krita/ui/KisViewManager.moc:84 #13 0x00007f89c78db1fa in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x2469b80, m=m@entry=0x7f89cf042a60 <KisPart::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff117f54c0) at kernel/qobject.cpp:3576 #14 0x00007f89cebdd24f in KisPart::sigViewAdded(KisView*) (this=this@entry=0x2469b80, _t1=_t1@entry=0x44af190) at /home/boud/kde/build/2.9/krita/ui/KisPart.moc:116 #15 0x00007f89cebdd3f7 in KisPart::addView(KisView*, KisDocument*) (this=this@entry=0x2469b80, view=view@entry=0x44af190, document=document@entry=0x336d9a0) at /home/boud/kde/src/2.9/krita/ui/KisPart.cpp:218 #16 0x00007f89cebdd639 in KisPart::createView(KisDocument*, KisMainWindow*) (this=this@entry=0x2469b80, document=document@entry=0x336d9a0, parent=parent@entry=0x25d63b0) at /home/boud/kde/src/2.9/krita/ui/KisPart.cpp:191 #17 0x00007f89cebdf566 in KisPart::startCustomDocument(KisDocument*) (this=0x2469b80, doc=0x336d9a0) at /home/boud/kde/src/2.9/krita/ui/KisPart.cpp:543 #18 0x00007f89cebdf650 in KisPart::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x2469b80, _c=<optimized out>, _id=5, _a=0x7fff117f5770) at /home/boud/kde/build/2.9/krita/ui/KisPart.moc:66 #19 0x00007f89c78db1fa in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x3bb8f80, m=m@entry=0x7f89cf03a0a0 <KisCustomImageWidget::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff117f5770) at kernel/qobject.cpp:3576 #20 0x00007f89ceb01cff in KisCustomImageWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_t1=<optimized out>, this=<optimized out>) at /home/boud/kde/build/2.9/krita/ui/kis_custom_image_widget.moc:199 #21 0x00007f89ceb01cff in KisCustomImageWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (this=<optimized out>) at /home/boud/kde/src/2.9/krita/ui/widgets/kis_custom_image_widget.cc:224 #22 0x00007f89ceb01cff in KisCustomImageWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x3bb8f80, _c=<optimized out>, _id=13, _a=0x7fff117f58d0) at /home/boud/kde/build/2.9/krita/ui/kis_custom_image_widget.moc:149 #23 0x00007f89c78db1fa in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x3c45820, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fff117f58d0) at kernel/qobject.cpp:3576 #24 0x00007f89c891ebb2 in QAbstractButton::clicked(bool) () at /usr/lib64/libQtGui.so.4 #25 0x00007f89c8681fe3 in () at /usr/lib64/libQtGui.so.4 #26 0x00007f89c868295a in QAbstractButton::click() () at /usr/lib64/libQtGui.so.4 #27 0x00007f89c8324ad4 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4 #28 0x00007f89c82d576c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4 #29 0x00007f89c82dcf61 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4 #30 0x00007f89ceb84797 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x3c45820, event=0x7fff117f5cd0) at /home/boud/kde/src/2.9/krita/ui/KisApplication.cpp:523 #31 0x00007f89c78c72ad in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7fff117f7870, receiver=0x3c45820, event=0x7fff117f5cd0) at kernel/qcoreapplication.cpp:953 #32 0x00007f89c836fab7 in () at /usr/lib64/libQtGui.so.4 #33 0x00007f89c836fe59 in () at /usr/lib64/libQtGui.so.4 #34 0x00007f89c834ba5f in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4 #35 0x00007f89c8372f30 in () at /usr/lib64/libQtGui.so.4 #36 0x00007f89c78c5e6f in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fff117f64d0, flags=...) at kernel/qeventloop.cpp:149 #37 0x00007f89c78c6165 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fff117f64d0, flags=...) at kernel/qeventloop.cpp:204 #38 0x00007f89c8777d1c in QDialog::exec() () at /usr/lib64/libQtGui.so.4 #39 0x00007f89cebdf9ff in KisPart::showStartUpWidget(KisMainWindow*, bool) (this=<optimized out>, mainWindow=mainWindow@entry=0x25d63b0, alwaysShow=alwaysShow@entry=true) at /home/boud/kde/src/2.9/krita/ui/KisPart.cpp:473 #40 0x00007f89cebc089a in KisMainWindow::slotFileNew() (this=this@entry=0x25d63b0) at /home/boud/kde/src/2.9/krita/ui/KisMainWindow.cpp:1361 #41 0x00007f89cebd60cd in KisMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x25d63b0, _c=<optimized out>, _id=6, _a=0x7fff117f68a0) at /home/boud/kde/build/2.9/krita/ui/KisMainWindow.moc:147 #42 0x00007f89c78db1fa in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x25d7590, m=<optimized out>, local_signal_index=<optimized out>, argv=0x7fff117f68a0) at kernel/qobject.cpp:3576 #43 0x00007f89c82cf622 in QAction::triggered(bool) () at /usr/lib64/libQtGui.so.4 #44 0x00007f89c82d0fd3 in QAction::activate(QAction::ActionEvent) () at /usr/lib64/libQtGui.so.4 #45 0x00007f89c82d112c in QAction::event(QEvent*) () at /usr/lib64/libQtGui.so.4 #46 0x00007f89c8f1821f in KAction::event(QEvent*) () at /usr/lib64/libkdeui.so.5 #47 0x00007f89c82d576c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4 #48 0x00007f89c82dbcad in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4 #49 0x00007f89ceb84797 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x25d7590, event=0x7fff117f6c50) at /home/boud/kde/src/2.9/krita/ui/KisApplication.cpp:523 #50 0x00007f89c78c72ad in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7fff117f7870, receiver=0x25d7590, event=0x7fff117f6c50) at kernel/qcoreapplication.cpp:953 #51 0x00007f89c83069d6 in () at /usr/lib64/libQtGui.so.4 #52 0x00007f89c8306b0c in () at /usr/lib64/libQtGui.so.4 #53 0x00007f89c82dcfe3 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4 #54 0x00007f89ceb84797 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x368f050, event=0x7fff117f6fa0) at /home/boud/kde/src/2.9/krita/ui/KisApplication.cpp:523 #55 0x00007f89c78c72ad in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7fff117f7870, receiver=0x368f050, event=0x7fff117f6fa0) at kernel/qcoreapplication.cpp:953 #56 0x00007f89c836fab7 in () at /usr/lib64/libQtGui.so.4 #57 0x00007f89c836fe59 in () at /usr/lib64/libQtGui.so.4 #58 0x00007f89c834ba5f in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4 #59 0x00007f89c8372f30 in () at /usr/lib64/libQtGui.so.4 #60 0x00007f89c78c5e6f in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fff117f7790, flags=...) at kernel/qeventloop.cpp:149 #61 0x00007f89c78c6165 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fff117f7790, flags=...) at kernel/qeventloop.cpp:204 #62 0x00007f89c78cb5b9 in QCoreApplication::exec() () at kernel/qcoreapplication.cpp:1225 #63 0x00007f89cf1bead3 in kdemain(int, char**) (argc=<optimized out>, argv=<optimized out>) at /home/boud/kde/src/2.9/krita/main.cc:110 #64 0x00007f89c64abb05 in __libc_start_main () at /lib64/libc.so.6 #65 0x00000000004009fe in _start () at ../sysdeps/x86_64/start.S:122
Git commit 4a713315e365bc0c90d4806280b7738dc5bc58e8 by Sven Langkamp. Committed on 21/12/2014 at 10:50. Pushed by langkamp into branch 'calligra/2.9'. Fix crash Crash when opening an image after having closed another one and changed opengl settings REVIEW:121614 Patch by Stefano Bonicatti M +13 -1 krita/ui/canvas/kis_canvas2.cpp http://commits.kde.org/calligra/4a713315e365bc0c90d4806280b7738dc5bc58e8