Bug 394032 - Infinite loop in ProjectManager::saveFileAs (reproducible)
Summary: Infinite loop in ProjectManager::saveFileAs (reproducible)
Status: RESOLVED FIXED
Alias: None
Product: kdenlive
Classification: Applications
Component: User Interface & Miscellaneous (show other bugs)
Version: 18.04.0
Platform: Fedora RPMs Linux
: NOR grave
Target Milestone: ---
Assignee: Jean-Baptiste Mardelle
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-05-09 05:03 UTC by averageradical
Modified: 2021-02-28 16:43 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:
fritzibaby: corner_case+


Attachments
pstacks and top -H output (52.07 KB, text/plain)
2018-05-09 05:03 UTC, averageradical
Details
pstacks and top -H output (24.62 KB, application/zip)
2018-05-09 05:05 UTC, averageradical
Details
Packages installed with sudo dnf group install kde-desktop-environment (25.63 KB, text/plain)
2018-06-04 03:52 UTC, averageradical
Details

Note You need to log in before you can comment on or make changes to this bug.
Description averageradical 2018-05-09 05:03:18 UTC
Created attachment 112521 [details]
pstacks and top -H output

First time using Kdenlive for non-trivial editing and I should have saved the project as I was going through, but after a few hours of editing and completing the video, I finally clicked File > Save As... and Kdenlive went into an infinite loop of some sort, using ~100% of 1 CPU core. I took pstacks, top -H, and a core dump and then killed it. Thankfully, when I restart Kdenlive, it asks to recover unsaved data and then I can easily reproduce the issue (and most importantly, I can render the file to a video, phew!). So if someone would like the raw recovery file data to reproduce themselves, I'm glad to provide it.
Comment 1 averageradical 2018-05-09 05:03:52 UTC
The core dump shows the following stack:

(gdb) bt
#0  0x00007f7f4ae039fc in QWeakPointer<QObject>::~QWeakPointer() (this=0x7ffc85d2d830, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qsharedpointer_impl.h:568
#1  0x00007f7f4ae02a16 in QPointer<QAbstractAnimation>::~QPointer() (this=0x7ffc85d2d830, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qpointer.h:53
#2  0x00007f7f4ae02a16 in QAbstractAnimationPrivate::setState(QAbstractAnimation::State) (this=0x562b845604d0, newState=newState@entry=QAbstractAnimation::Stopped) at animation/qabstractanimation.cpp:984
#3  0x00007f7f4ae02b17 in QAbstractAnimation::stop() (this=this@entry=0x562b82881540) at animation/qabstractanimation.cpp:1387
#4  0x00007f7f4ae02bf4 in QAbstractAnimation::setCurrentTime(int) (this=this@entry=0x562b82881540, msecs=<optimized out>) at animation/qabstractanimation.cpp:1341
#5  0x00007f7f4ae02aa7 in QAbstractAnimationPrivate::setState(QAbstractAnimation::State) (this=0x562b845604d0, newState=QAbstractAnimation::Running) at animation/qabstractanimation.cpp:1018
#6  0x00007f7f4fa16e7a in QWidgetAnimator::animate(QWidget*, QRect const&, bool) (this=this@entry=0x562b7e384528, widget=<optimized out>, 
    widget@entry=0x562b7fd1c8c0, _final_geometry=..., animate=<optimized out>, animate@entry=false) at widgets/qwidgetanimator.cpp:107
#7  0x00007f7f4fa56a14 in QDockAreaLayoutInfo::apply(bool) (this=0x562b8435ac40, animate=animate@entry=false) at widgets/qdockarealayout.cpp:1569
#8  0x00007f7f4fa56ae9 in QDockAreaLayoutInfo::apply(bool) (this=this@entry=0x562b7e384188, animate=animate@entry=false) at widgets/qdockarealayout.cpp:1557
#9  0x00007f7f4fa56c70 in QDockAreaLayout::apply(bool) (this=this@entry=0x562b7e3840a8, animate=animate@entry=false) at widgets/qdockarealayout.cpp:3228
#10 0x00007f7f4fa86d07 in QMainWindowLayoutState::apply(bool) (animated=<optimized out>, this=0x562b7e383fd0) at widgets/qmainwindowlayout.cpp:525
#11 0x00007f7f4fa86d07 in QMainWindowLayout::applyState(QMainWindowLayoutState&, bool) (this=this@entry=0x562b7e383fb0, newState=..., animate=animate@entry=false) at widgets/qmainwindowlayout.cpp:2644
#12 0x00007f7f4fa8969e in QMainWindowLayout::setGeometry(QRect const&) (this=0x562b7e383fb0, _r=...) at widgets/qmainwindowlayout.cpp:1919
#13 0x00007f7f4f948bb8 in QLayoutPrivate::doResize(QSize const&) (this=this@entry=0x562b7e3551a0, r=...) at kernel/qlayout.cpp:589
#14 0x00007f7f4f949c69 in QLayout::activate() (this=<optimized out>) at kernel/qlayout.cpp:1114
#15 0x00007f7f4f96ada7 in QWidget::setVisible(bool) (this=0x562b7e513b50, visible=<optimized out>) at kernel/qwidget.cpp:8308
#16 0x00007f7f4fa11c3d in QToolBarLayout::layoutActions(QSize const&) (this=this@entry=0x562b7e42a3a0, size=...) at widgets/qtoolbarlayout.cpp:572
#17 0x00007f7f4fa124ed in QToolBarLayout::setGeometry(QRect const&) (this=0x562b7e42a3a0, rect=...) at widgets/qtoolbarlayout.cpp:399
#18 0x00007f7f4f948bb8 in QLayoutPrivate::doResize(QSize const&) (this=this@entry=0x562b7e3e0500, r=...) at kernel/qlayout.cpp:589
#19 0x00007f7f4f949c69 in QLayout::activate() (this=<optimized out>) at kernel/qlayout.cpp:1114
#20 0x00007f7f4f96ada7 in QWidget::setVisible(bool) (this=0x562b7e4c7910, visible=<optimized out>) at kernel/qwidget.cpp:8308
#21 0x00007f7f4fa125bd in QToolBarLayout::setGeometry(QRect const&) (this=0x562b7e42a3a0, rect=...) at widgets/qtoolbarlayout.cpp:424
#22 0x00007f7f4f948bb8 in QLayoutPrivate::doResize(QSize const&) (this=this@entry=0x562b7e3e0500, r=...) at kernel/qlayout.cpp:589
#23 0x00007f7f4f949c69 in QLayout::activate() (this=<optimized out>) at kernel/qlayout.cpp:1114
#24 0x00007f7f4f92c8fa in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x562b7e4c7370, e=0x7f7f2c012fa0) at kernel/qapplication.cpp:3713
#25 0x00007f7f4f934174 in QApplication::notify(QObject*, QEvent*) (this=0x7ffc85d2f800, receiver=0x562b7e4c7370, e=0x7f7f2c012fa0) at kernel/qapplication.cpp:3481
#26 0x00007f7f4afd1be7 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x562b7e4c7370, event=event@entry=0x7f7f2c012fa0) at kernel/qcoreapplication.cpp:1016
#27 0x00007f7f4afd436b in QCoreApplication::sendEvent(QObject*, QEvent*) (event=0x7f7f2c012fa0, receiver=<optimized out>) at kernel/qcoreapplication.h:233
#28 0x00007f7f4afd436b in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (receiver=receiver@entry=0x0, event_type=event_type@entry=0, data=0x562b7db83a80)
    at kernel/qcoreapplication.cpp:1676
#29 0x00007f7f4afd4888 in QCoreApplication::sendPostedEvents(QObject*, int) (receiver=receiver@entry=0x0, event_type=event_type@entry=0) at kernel/qcoreapplication.cpp:1530
#30 0x00007f7f4b022e43 in postEventSourceDispatch(GSource*, GSourceFunc, gpointer) (s=0x562b7dcad5b0) at kernel/qeventdispatcher_glib.cpp:276
#31 0x00007f7f42aa2b77 in g_main_dispatch (context=0x7f7f2c004ff0) at gmain.c:3142
#32 0x00007f7f42aa2b77 in g_main_context_dispatch (context=context@entry=0x7f7f2c004ff0) at gmain.c:3795
#33 0x00007f7f42aa2f20 in g_main_context_iterate (context=0x7f7f2c004ff0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3868
#34 0x00007f7f42aa3232 in g_main_loop_run (loop=0x562b83fd8560) at gmain.c:4064
#35 0x00007f7f2b66df43 in gtk_dialog_run (dialog=0x562b842e6670 [GtkFileChooserDialog]) at gtkdialog.c:1397
#36 0x00007f7f2bdf83a0 in QGtk3Dialog::exec() (this=0x562b84087e80) at ../src/qgtk3dialoghelpers.cpp:108
#37 0x00007f7f4fb17e44 in QDialog::exec() (this=this@entry=0x7ffc85d2e770) at dialogs/qdialog.cpp:541
#38 0x0000562b7c3d936e in ProjectManager::saveFileAs() (this=0x562b7e384cc0) at /usr/src/debug/kdenlive-18.04.0-2.fc27.x86_64/src/project/projectmanager.cpp:349
#39 0x0000562b7c7431d5 in ProjectManager::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x562b7e384cc0, _id=<optimized out>, _a=0x7ffc85d2e940, _c=<optimized out>)
    at /usr/src/debug/kdenlive-18.04.0-2.fc27.x86_64/x86_64-redhat-linux-gnu/src/kdenlive_autogen/QV7S676PVK/moc_projectmanager.cpp:185
#40 0x00007f7f4affa513 in QMetaObject::activate(QObject*, int, int, void**) (sender=sender@entry=0x562b7e389120, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x7ffc85d2e940) at kernel/qobject.cpp:3766
#41 0x00007f7f4affab87 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x562b7e389120, m=m@entry=0x7f7f4fff1940 <QAction::staticMetaObject>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x7ffc85d2e940) at kernel/qobject.cpp:3628
#42 0x00007f7f4f9261b2 in QAction::triggered(bool) (this=this@entry=0x562b7e389120, _t1=<optimized out>) at .moc/moc_qaction.cpp:370
#43 0x00007f7f4f9288cb in QAction::activate(QAction::ActionEvent) (this=this@entry=0x562b7e389120, event=event@entry=QAction::Trigger) at kernel/qaction.cpp:1165
#44 0x00007f7f4faa5ba4 in QMenuPrivate::activateCausedStack(QVector<QPointer<QWidget> > const&, QAction*, QAction::ActionEvent, bool) (this=this@entry=0x562b8029d060, causedStack=..., action=action@entry=0x562b7e389120, action_e=action_e@entry=QAction::Trigger, self=self@entry=true) at widgets/qmenu.cpp:1323
---Type <return> to continue, or q <return> to quit---
#45 0x00007f7f4faad0db in QMenuPrivate::activateAction(QAction*, QAction::ActionEvent, bool) (this=this@entry=0x562b8029d060, action=action@entry=0x562b7e389120, action_e=action_e@entry=QAction::Trigger, self=self@entry=true) at widgets/qmenu.cpp:1400
#46 0x00007f7f4faadf03 in QMenu::mouseReleaseEvent(QMouseEvent*) (this=<optimized out>, e=0x7ffc85d2ef50) at widgets/qmenu.cpp:2888
#47 0x00007f7f4f96b2a8 in QWidget::event(QEvent*) (this=this@entry=0x562b802a9f10, event=event@entry=0x7ffc85d2ef50) at kernel/qwidget.cpp:9279
#48 0x00007f7f4fab01db in QMenu::event(QEvent*) (this=0x562b802a9f10, e=0x7ffc85d2ef50) at widgets/qmenu.cpp:3010
#49 0x00007f7f4f92c92c in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x562b802a9f10, e=0x7ffc85d2ef50) at kernel/qapplication.cpp:3722
#50 0x00007f7f4f9346cf in QApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x562b802a9f10, e=0x7ffc85d2ef50) at kernel/qapplication.cpp:3198
#51 0x00007f7f4afd1be7 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x562b802a9f10, event=0x7ffc85d2ef50) at kernel/qcoreapplication.cpp:1016
#52 0x00007f7f4f9336a2 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (receiver=0x562b802a9f10, event=0x7ffc85d2ef50, alienWidget=0x0, nativeWidget=0x562b802a9f10, buttonDown=<optimized out>, lastMouseReceiver=..., spontaneous=true) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:233
#53 0x00007f7f4f9861b3 in QWidgetWindow::handleMouseEvent(QMouseEvent*) (this=0x7f7f2c010d20, event=0x7ffc85d2f340) at kernel/qwidgetwindow.cpp:523
#54 0x00007f7f4f988b1f in QWidgetWindow::event(QEvent*) (this=0x7f7f2c010d20, event=0x7ffc85d2f340) at kernel/qwidgetwindow.cpp:250
#55 0x00007f7f4f92c92c in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x7f7f2c010d20, e=0x7ffc85d2f340) at kernel/qapplication.cpp:3722
#56 0x00007f7f4f934174 in QApplication::notify(QObject*, QEvent*) (this=0x7ffc85d2f800, receiver=0x7f7f2c010d20, e=0x7ffc85d2f340) at kernel/qapplication.cpp:3481
#57 0x00007f7f4afd1be7 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=receiver@entry=0x7f7f2c010d20, event=event@entry=0x7ffc85d2f340) at kernel/qcoreapplication.cpp:1016
#58 0x00007f7f4b5248a3 in QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) (event=0x7ffc85d2f340, receiver=0x7f7f2c010d20) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:236
#59 0x00007f7f4b5248a3 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (e=0x562b826905a0) at kernel/qguiapplication.cpp:1952
#60 0x00007f7f4b526495 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) (e=0x562b826905a0) at kernel/qguiapplication.cpp:1733
#61 0x00007f7f4b4ff79b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (flags=...) at kernel/qwindowsysteminterface.cpp:946
#62 0x00007f7f331c6b60 in userEventSourceDispatch(GSource*, GSourceFunc, gpointer) (source=<optimized out>) at qeventdispatcher_glib.cpp:77
#63 0x00007f7f42aa2b77 in g_main_dispatch (context=0x7f7f2c004ff0) at gmain.c:3142
#64 0x00007f7f42aa2b77 in g_main_context_dispatch (context=context@entry=0x7f7f2c004ff0) at gmain.c:3795
#65 0x00007f7f42aa2f20 in g_main_context_iterate (context=context@entry=0x7f7f2c004ff0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3868
#66 0x00007f7f42aa2fac in g_main_context_iteration (context=0x7f7f2c004ff0, may_block=may_block@entry=1) at gmain.c:3929
#67 0x00007f7f4b022c2f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x562b7dd6cd70, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#68 0x00007f7f4afd096a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffc85d2f6f0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:212
#69 0x00007f7f4afd9094 in QCoreApplication::exec() () at kernel/qcoreapplication.cpp:1289
#70 0x0000562b7c341645 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/kdenlive-18.04.0-2.fc27.x86_64/src/main.cpp:164
Comment 2 averageradical 2018-05-09 05:05:02 UTC
Created attachment 112522 [details]
pstacks and top -H output
Comment 3 averageradical 2018-05-09 05:06:12 UTC
The pstacks show that the thread is moving, but it's always rooted in ProjectManager::saveFileAs

I'm glad to run any other gdb commands if someone has any quick questions (I'm generally proficient in gdb). I can also provide the core file although it's 861MB gzipped, so I don't know the best way to share that. Attaching pstacks and top -H output. I'm on Fedora 27 x64; Linux x270 4.16.5-200.fc27.x86_64; QT 5.9.4-4.fc27
Comment 4 Christoph Feck 2018-05-31 21:36:38 UTC
Could be related to:

> #36 0x00007f7f2bdf83a0 in QGtk3Dialog::exec()

If you still can reproduce this issue, could you test with the normal Plasma file dialogs, instead of GTK dialogs?
Comment 5 averageradical 2018-06-04 03:51:12 UTC
(In reply to Christoph Feck from comment #4)
> Could be related to:
> 
> > #36 0x00007f7f2bdf83a0 in QGtk3Dialog::exec()
> 
> If you still can reproduce this issue, could you test with the normal Plasma
> file dialogs, instead of GTK dialogs?

I realized late last week that I could reproduce this even by just trying to safe a blank project after creating it.

Based on your suggestion, I realized I don't even have the KDE login option, so I installed it with `sudo dnf group install kde-desktop-environment`.

Now Kdenlive no longer crashes, even from within Gnome! I guess it was missing some shared library? Which I guess means that the dependency graph of Kdenlive is missing something - this might be a Fedora packaging issue. If you have any ideas on what the library might be, I can open a bug report with Fedora. I'll attach the dnf log for what was installed with kde-desktop-environment.
Comment 6 averageradical 2018-06-04 03:52:16 UTC
Created attachment 113060 [details]
Packages installed with sudo dnf group install kde-desktop-environment
Comment 7 averageradical 2018-06-05 02:58:51 UTC
Nevermind. The program still crashes under Gnome. However, I did try your suggestion of running Kdenlive under Plasma and it works fine. So it seems to be something specific to running under Gnome.
Comment 8 emohr 2021-02-28 16:43:06 UTC
It seems that this report is related to very old unmaintained version. A lot changed since then, especially the timeline got a complete rewrite and it is likely that this has been fixed.
Feel free to reopen this bug or create a new report if this is still happening with the latest version (https://kdenlive.org/en/download/)