Bug 341781 - Crash when opening an image after having closed another one and changed opengl settings
Summary: Crash when opening an image after having closed another one and changed openg...
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: General (show other bugs)
Version: 2.9 Beta
Platform: Debian testing Linux
: NOR crash
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-12-11 17:00 UTC by Stefano Bonicatti
Modified: 2014-12-21 10:54 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 Stefano Bonicatti 2014-12-11 17:00:08 UTC
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
Comment 1 Halla Rempt 2014-12-11 17:29:22 UTC
That  looks like a new crash after Dmitry's input manager fix this afternoon. Dmitry, can you take a look?
Comment 2 Stefano Bonicatti 2014-12-11 17:38:53 UTC
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 :).
Comment 3 Halla Rempt 2014-12-19 07:47:18 UTC
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
Comment 4 Sven Langkamp 2014-12-21 10:54:06 UTC
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