Bug 341021 - Crash on exit when empty tour was created in tour panel
Summary: Crash on exit when empty tour was created in tour panel
Status: RESOLVED FIXED
Alias: None
Product: marble
Classification: Applications
Component: general (show other bugs)
Version: 1.9 (KDE 4.14)
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Dennis Nienhüser
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-11-16 12:11 UTC by Bernhard Beschow
Modified: 2016-04-02 07:01 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:
nienhueser: Backport+


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Bernhard Beschow 2014-11-16 12:11:34 UTC
After creating an empty tour in the tour panel, Marble crashes when closing.

Reproducible: Always

Steps to Reproduce:
1) Start Marble
2) Click the new tour button in tour panel
3) Close Marble


Actual Results:  
Marble crashes

Expected Results:  
Marble shouldn't crash
Comment 1 Bernhard Beschow 2014-11-16 12:12:07 UTC
-- Backtrace:
Application: Marble – Virtueller Globus (marble), signal: Segmentation fault
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[Current thread is 1 (Thread 0x7ff38457a800 (LWP 16461))]

Thread 9 (Thread 0x7ff35ffdf700 (LWP 16466)):
#0  0x00007ff380ada5bd in poll () from /usr/lib/libc.so.6
#1  0x00007ff37a2f4ca4 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007ff37a2f4dbc in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#3  0x00007ff381262397 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#4  0x00007ff381231de1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#5  0x00007ff381232145 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#6  0x00007ff3811267f9 in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007ff3812126c3 in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007ff38112905f in ?? () from /usr/lib/libQtCore.so.4
#9  0x00007ff37ba93314 in start_thread () from /usr/lib/libpthread.so.0
#10 0x00007ff380ae33ed in clone () from /usr/lib/libc.so.6

Thread 8 (Thread 0x7ff356f57700 (LWP 16468)):
#0  0x00007ff37ba988bf in pthread_cond_wait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
#1  0x00007ff37f02b52f in ?? () from /usr/lib/libQtWebKit.so.4
#2  0x00007ff37f02b569 in ?? () from /usr/lib/libQtWebKit.so.4
#3  0x00007ff37ba93314 in start_thread () from /usr/lib/libpthread.so.0
#4  0x00007ff380ae33ed in clone () from /usr/lib/libc.so.6

Thread 7 (Thread 0x7ff316654700 (LWP 16469)):
#0  0x00007ff37ba988bf in pthread_cond_wait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
#1  0x00007ff37ed5a493 in ?? () from /usr/lib/libQtWebKit.so.4
#2  0x00007ff37f05c416 in ?? () from /usr/lib/libQtWebKit.so.4
#3  0x00007ff37ba93314 in start_thread () from /usr/lib/libpthread.so.0
#4  0x00007ff380ae33ed in clone () from /usr/lib/libc.so.6

Thread 6 (Thread 0x7ff30effd700 (LWP 16476)):
#0  0x00007ff37ba98c68 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
#1  0x00007ff381129594 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00007ff38111c875 in ?? () from /usr/lib/libQtCore.so.4
#3  0x00007ff38112905f in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007ff37ba93314 in start_thread () from /usr/lib/libpthread.so.0
#5  0x00007ff380ae33ed in clone () from /usr/lib/libc.so.6

Thread 5 (Thread 0x7ff30f7fe700 (LWP 16477)):
#0  0x00007ff37ba98c68 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
#1  0x00007ff381129594 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00007ff38111c875 in ?? () from /usr/lib/libQtCore.so.4
#3  0x00007ff38112905f in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007ff37ba93314 in start_thread () from /usr/lib/libpthread.so.0
#5  0x00007ff380ae33ed in clone () from /usr/lib/libc.so.6

Thread 4 (Thread 0x7ff315a53700 (LWP 16478)):
#0  0x00007ff380ada5bd in poll () from /usr/lib/libc.so.6
#1  0x00007ff37a2f4ca4 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007ff37a2f4dbc in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#3  0x00007ff381262397 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#4  0x00007ff381231de1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#5  0x00007ff381232145 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#6  0x00007ff3811267f9 in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007ff38112905f in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007ff37ba93314 in start_thread () from /usr/lib/libpthread.so.0
#9  0x00007ff380ae33ed in clone () from /usr/lib/libc.so.6

Thread 3 (Thread 0x7ff30ffff700 (LWP 16480)):
#0  0x00007ff37ba988bf in pthread_cond_wait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
#1  0x00007ff37fccb1ca in ?? () from /usr/lib/libQtScript.so.4
#2  0x00007ff37fccb1f9 in ?? () from /usr/lib/libQtScript.so.4
#3  0x00007ff37ba93314 in start_thread () from /usr/lib/libpthread.so.0
#4  0x00007ff380ae33ed in clone () from /usr/lib/libc.so.6

Thread 2 (Thread 0x7ff30cba3700 (LWP 16483)):
#0  0x00007ff37ba98c68 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
#1  0x00007ff381129594 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQtCore.so.4
#2  0x00007ff38111c875 in ?? () from /usr/lib/libQtCore.so.4
#3  0x00007ff38112905f in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007ff37ba93314 in start_thread () from /usr/lib/libpthread.so.0
#5  0x00007ff380ae33ed in clone () from /usr/lib/libc.so.6

Thread 1 (Thread 0x7ff38457a800 (LWP 16461)):
[KCrash Handler]
#5  Marble::MarbleGraphicsItem::p (this=0xffffffd600290105) at /home/shentey/Projekte/marble/src/src/lib/marble/graphicsview/MarbleGraphicsItem.cpp:264
#6  0x00007ff383a0d898 in Marble::MarbleGraphicsItem::setVisible (this=<optimized out>, visible=<optimized out>) at /home/shentey/Projekte/marble/src/src/lib/marble/graphicsview/MarbleGraphicsItem.cpp:184
#7  0x00007ff383a1a46f in Marble::PopupLayer::setVisible (this=0x136e3c0, visible=<optimized out>) at /home/shentey/Projekte/marble/src/src/lib/marble/layers/PopupLayer.cpp:106
#8  0x00007ff383a489b7 in Marble::TourPlayback::hideBalloon (this=<optimized out>) at /home/shentey/Projekte/marble/src/src/lib/marble/TourPlayback.cpp:114
#9  0x00007ff383a49093 in Marble::TourPlayback::stop (this=this@entry=0x177b378) at /home/shentey/Projekte/marble/src/src/lib/marble/TourPlayback.cpp:263
#10 0x00007ff383a49b97 in Marble::TourPlayback::~TourPlayback (this=0x177b378, __in_chrg=<optimized out>) at /home/shentey/Projekte/marble/src/src/lib/marble/TourPlayback.cpp:85
#11 0x00007ff383a45d0a in Marble::TourWidget::~TourWidget (this=0x1779380, __in_chrg=<optimized out>) at /home/shentey/Projekte/marble/src/src/lib/marble/TourWidget.cpp:367
#12 0x00007ff383a45d39 in Marble::TourWidget::~TourWidget (this=0x1779380, __in_chrg=<optimized out>) at /home/shentey/Projekte/marble/src/src/lib/marble/TourWidget.cpp:368
#13 0x00007ff38124a8c8 in QObjectPrivate::deleteChildren() () from /usr/lib/libQtCore.so.4
#14 0x00007ff381aff7b3 in QWidget::~QWidget() () from /usr/lib/libQtGui.so.4
#15 0x00007ff381eaa6b9 in QDockWidget::~QDockWidget() () from /usr/lib/libQtGui.so.4
#16 0x00007ff38124a8c8 in QObjectPrivate::deleteChildren() () from /usr/lib/libQtCore.so.4
#17 0x00007ff381aff7b3 in QWidget::~QWidget() () from /usr/lib/libQtGui.so.4
#18 0x00007ff383014476 in KMainWindow::~KMainWindow() () from /usr/lib/libkdeui.so.5
#19 0x000000000041cd8a in Marble::MainWindow::~MainWindow (this=0xea2350, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /home/shentey/Projekte/marble/src/src/apps/marble-kde/KdeMainWindow.cpp:142
#20 0x000000000041cde9 in Marble::MainWindow::~MainWindow (this=0xea2350, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /home/shentey/Projekte/marble/src/src/apps/marble-kde/KdeMainWindow.cpp:146
#21 0x00007ff38124c4b8 in QObject::event(QEvent*) () from /usr/lib/libQtCore.so.4
#22 0x00007ff381b002a3 in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4
#23 0x00007ff381eda3b3 in QMainWindow::event(QEvent*) () from /usr/lib/libQtGui.so.4
#24 0x00007ff3830511a9 in KXmlGuiWindow::event(QEvent*) () from /usr/lib/libkdeui.so.5
#25 0x00007ff381aacb2c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#26 0x00007ff381ab3588 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#27 0x00007ff382f4f2da in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5
#28 0x00007ff38123328d in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4
#29 0x00007ff381236651 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQtCore.so.4
#30 0x00007ff381262233 in ?? () from /usr/lib/libQtCore.so.4
#31 0x00007ff37a2f4a1d in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#32 0x00007ff37a2f4d08 in ?? () from /usr/lib/libglib-2.0.so.0
#33 0x00007ff37a2f4dbc in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#34 0x00007ff38126237d in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#35 0x00007ff381b50526 in ?? () from /usr/lib/libQtGui.so.4
#36 0x00007ff381231de1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#37 0x00007ff381232145 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#38 0x00007ff3812376e9 in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4
#39 0x000000000041c451 in main (argc=<optimized out>, argv=<optimized out>) at /home/shentey/Projekte/marble/src/src/apps/marble-kde/kdemain.cpp:407
Comment 2 Bernhard Beschow 2014-11-16 12:16:45 UTC
Could be a duplicate of bug 340464.
Comment 3 Gregor Mi 2016-03-20 20:05:43 UTC
I can confirm this on Marble 1.12.20.
- Create new Tour in the Tour panel.
- Click exit.
- Choose Discard on the appearing dialog box.
- Crash.
Comment 4 Dennis Nienhüser 2016-03-21 09:30:00 UTC
I cannot reproduce this in master. Please reopen if it happens with Marble 1.13 or later.
Comment 5 Dennis Nienhüser 2016-04-02 06:56:16 UTC
Happens in the KDE version, but not the Qt version. The reason is the destruction order when marble widget goes out of scope before tour widget and the latter tries to use the former in its dtor.
Comment 6 Dennis Nienhüser 2016-04-02 06:57:45 UTC
Git commit feabb07036b85930b1b228e19b24742f01d4b543 by Dennis Nienhüser.
Committed on 02/04/2016 at 06:57.
Pushed by nienhueser into branch 'master'.

Do not crash on exit when a tour was created (KDE version only)

M  +2    -1    src/lib/marble/TourPlayback.cpp

http://commits.kde.org/marble/feabb07036b85930b1b228e19b24742f01d4b543
Comment 7 Dennis Nienhüser 2016-04-02 07:01:31 UTC
Git commit 901449c2502f5367625a43a7f6832f00c9bf47f6 by Dennis Nienhüser.
Committed on 02/04/2016 at 07:01.
Pushed by nienhueser into branch 'Applications/16.04'.

Do not crash on exit when a tour was created (KDE version only)
(cherry picked from commit feabb07036b85930b1b228e19b24742f01d4b543)

M  +2    -1    src/lib/marble/TourPlayback.cpp

http://commits.kde.org/marble/901449c2502f5367625a43a7f6832f00c9bf47f6