Sorting the playlist leads to segfault
When you initiate a request to sort the playlist through the Qt-interface it /might/ lead to a segfault due to a race in the relevant code.
How to reproduce
- Have a playlist of N items
- Right click on one of them
- Go to "Sort by" and click ${ some entry that would move things around }
backtrace
Thread 7 "vlc-static" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffdc152700 (LWP 11817)]
PLModel::parent (this=0x7fffcc3543b0, index=...) at components/playlist/playlist_model.cpp:499
499 if( !parentItem->parent() )
(gdb) bt
[#0](https://code.videolan.org/videolan/vlc/-/issues/0) PLModel::parent (this=0x7fffcc3543b0, index=...) at components/playlist/playlist_model.cpp:499
[#1](https://code.videolan.org/videolan/vlc/-/issues/1) 0x00007fffdef8765a in QTreeView::scrollTo(QModelIndex const&, QAbstractItemView::ScrollHint) () from /usr/lib/libQt5Widgets.so.5
[#2](https://code.videolan.org/videolan/vlc/-/issues/2) 0x00007fffdf59d6f2 in StandardPLPanel::handleExpansion (this=0x7fffcc356780, index=...) at components/playlist/standardpanel.cpp:149
[#3](https://code.videolan.org/videolan/vlc/-/issues/3) 0x00007fffdf5f89c9 in StandardPLPanel::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
at components/playlist/standardpanel.moc.cpp:147
[#4](https://code.videolan.org/videolan/vlc/-/issues/4) 0x00007fffddbd76d9 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
[#5](https://code.videolan.org/videolan/vlc/-/issues/5) 0x00007fffdf5f7ea2 in VLCModel::currentIndexChanged (this=<optimized out>, _t1=...) at components/playlist/vlc_model.moc.cpp:149
[#6](https://code.videolan.org/videolan/vlc/-/issues/6) 0x00007fffdf594c8c in PLModel::sort (this=0x7fffcc3543b0, caller=..., rootIndex=..., column=<optimized out>, order=<optimized out>)
at components/playlist/playlist_model.cpp:829
[#7](https://code.videolan.org/videolan/vlc/-/issues/7) 0x00007fffdf5957f0 in PLModel::action (this=<optimized out>, action=<optimized out>, indexes=...) at components/playlist/playlist_model.cpp:956
[#8](https://code.videolan.org/videolan/vlc/-/issues/8) 0x00007fffdf5a078b in StandardPLPanel::popupAction (this=0x7fffcc356780, action=<optimized out>) at components/playlist/standardpanel.cpp:397
[#9](https://code.videolan.org/videolan/vlc/-/issues/9) 0x00007fffdf5f8a64 in StandardPLPanel::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
at components/playlist/standardpanel.moc.cpp:156
[#10](https://code.videolan.org/videolan/vlc/-/issues/10) 0x00007fffddbd76d9 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
[#11](https://code.videolan.org/videolan/vlc/-/issues/11) 0x00007fffdee623f2 in QMenu::triggered(QAction*) () from /usr/lib/libQt5Widgets.so.5
[#12](https://code.videolan.org/videolan/vlc/-/issues/12) 0x00007fffdee6357d in ?? () from /usr/lib/libQt5Widgets.so.5
[#13](https://code.videolan.org/videolan/vlc/-/issues/13) 0x00007fffdee6974c in ?? () from /usr/lib/libQt5Widgets.so.5
[#14](https://code.videolan.org/videolan/vlc/-/issues/14) 0x00007fffdee6d896 in QMenu::mouseReleaseEvent(QMouseEvent*) () from /usr/lib/libQt5Widgets.so.5
[#15](https://code.videolan.org/videolan/vlc/-/issues/15) 0x00007fffded2b298 in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#16](https://code.videolan.org/videolan/vlc/-/issues/16) 0x00007fffdee6e34b in QMenu::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#17](https://code.videolan.org/videolan/vlc/-/issues/17) 0x00007fffdece67bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#18](https://code.videolan.org/videolan/vlc/-/issues/18) 0x00007fffdecec727 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#19](https://code.videolan.org/videolan/vlc/-/issues/19) 0x00007fffddbaa2e0 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
[#20](https://code.videolan.org/videolan/vlc/-/issues/20) 0x00007fffdeceaee5 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) ()
from /usr/lib/libQt5Widgets.so.5
[#21](https://code.videolan.org/videolan/vlc/-/issues/21) 0x00007fffded45631 in ?? () from /usr/lib/libQt5Widgets.so.5
[#22](https://code.videolan.org/videolan/vlc/-/issues/22) 0x00007fffded47793 in ?? () from /usr/lib/libQt5Widgets.so.5
[#23](https://code.videolan.org/videolan/vlc/-/issues/23) 0x00007fffdece67bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#24](https://code.videolan.org/videolan/vlc/-/issues/24) 0x00007fffdeceb95f in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#25](https://code.videolan.org/videolan/vlc/-/issues/25) 0x00007fffddbaa2e0 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
[#26](https://code.videolan.org/videolan/vlc/-/issues/26) 0x00007fffde0f6693 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/libQt5Gui.so.5
[#27](https://code.videolan.org/videolan/vlc/-/issues/27) 0x00007fffde0f7ea5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/libQt5Gui.so.5
[#28](https://code.videolan.org/videolan/vlc/-/issues/28) 0x00007fffde0d518b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Gui.so.5
[#29](https://code.videolan.org/videolan/vlc/-/issues/29) 0x00007fffcaced080 in ?? () from /usr/lib/libQt5XcbQpa.so.5
[#30](https://code.videolan.org/videolan/vlc/-/issues/30) 0x00007ffff20a3dd7 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
[#31](https://code.videolan.org/videolan/vlc/-/issues/31) 0x00007ffff20a4040 in ?? () from /usr/lib/libglib-2.0.so.0
[#32](https://code.videolan.org/videolan/vlc/-/issues/32) 0x00007ffff20a40ec in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
[#33](https://code.videolan.org/videolan/vlc/-/issues/33) 0x00007fffddc0072f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
[#34](https://code.videolan.org/videolan/vlc/-/issues/34) 0x00007fffddba84ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
[#35](https://code.videolan.org/videolan/vlc/-/issues/35) 0x00007fffdee6858d in QMenu::exec(QPoint const&, QAction*) () from /usr/lib/libQt5Widgets.so.5
[#36](https://code.videolan.org/videolan/vlc/-/issues/36) 0x00007fffdf5a2d2c in StandardPLPanel::popup (this=this@entry=0x7fffcc356780, point=...) at components/playlist/standardpanel.cpp:281
[#37](https://code.videolan.org/videolan/vlc/-/issues/37) 0x00007fffdf5a3fb6 in StandardPLPanel::popupPlView (this=0x7fffcc356780, point=...) at components/playlist/standardpanel.cpp:165
[#38](https://code.videolan.org/videolan/vlc/-/issues/38) 0x00007fffdf5f8a39 in StandardPLPanel::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
at components/playlist/standardpanel.moc.cpp:154
---Type <return> to continue, or q <return> to quit---
[#39](https://code.videolan.org/videolan/vlc/-/issues/39) 0x00007fffddbd76d9 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
[#40](https://code.videolan.org/videolan/vlc/-/issues/40) 0x00007fffded10ca5 in QWidget::customContextMenuRequested(QPoint const&) () from /usr/lib/libQt5Widgets.so.5
[#41](https://code.videolan.org/videolan/vlc/-/issues/41) 0x00007fffded2bf48 in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#42](https://code.videolan.org/videolan/vlc/-/issues/42) 0x00007fffdee2773e in QFrame::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#43](https://code.videolan.org/videolan/vlc/-/issues/43) 0x00007fffdef4d153 in QAbstractItemView::viewportEvent(QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#44](https://code.videolan.org/videolan/vlc/-/issues/44) 0x00007fffdef8a2dc in QTreeView::viewportEvent(QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#45](https://code.videolan.org/videolan/vlc/-/issues/45) 0x00007fffddbaa041 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
[#46](https://code.videolan.org/videolan/vlc/-/issues/46) 0x00007fffdece6795 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#47](https://code.videolan.org/videolan/vlc/-/issues/47) 0x00007fffdecec3d0 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#48](https://code.videolan.org/videolan/vlc/-/issues/48) 0x00007fffddbaa2e0 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
[#49](https://code.videolan.org/videolan/vlc/-/issues/49) 0x00007fffded453fc in ?? () from /usr/lib/libQt5Widgets.so.5
[#50](https://code.videolan.org/videolan/vlc/-/issues/50) 0x00007fffded47793 in ?? () from /usr/lib/libQt5Widgets.so.5
[#51](https://code.videolan.org/videolan/vlc/-/issues/51) 0x00007fffdece67bc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#52](https://code.videolan.org/videolan/vlc/-/issues/52) 0x00007fffdeceb95f in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
[#53](https://code.videolan.org/videolan/vlc/-/issues/53) 0x00007fffddbaa2e0 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
[#54](https://code.videolan.org/videolan/vlc/-/issues/54) 0x00007fffde0f6693 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/libQt5Gui.so.5
[#55](https://code.videolan.org/videolan/vlc/-/issues/55) 0x00007fffde0f7ea5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/libQt5Gui.so.5
[#56](https://code.videolan.org/videolan/vlc/-/issues/56) 0x00007fffde0d518b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Gui.so.5
[#57](https://code.videolan.org/videolan/vlc/-/issues/57) 0x00007fffcaced080 in ?? () from /usr/lib/libQt5XcbQpa.so.5
[#58](https://code.videolan.org/videolan/vlc/-/issues/58) 0x00007ffff20a3dd7 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
[#59](https://code.videolan.org/videolan/vlc/-/issues/59) 0x00007ffff20a4040 in ?? () from /usr/lib/libglib-2.0.so.0
[#60](https://code.videolan.org/videolan/vlc/-/issues/60) 0x00007ffff20a40ec in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
[#61](https://code.videolan.org/videolan/vlc/-/issues/61) 0x00007fffddc0072f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
[#62](https://code.videolan.org/videolan/vlc/-/issues/62) 0x00007fffddba84ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
[#63](https://code.videolan.org/videolan/vlc/-/issues/63) 0x00007fffddbb0a6c in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5
[#64](https://code.videolan.org/videolan/vlc/-/issues/64) 0x00007fffdf48b7ed in Thread (obj=0x736298) at qt.cpp:595
[#65](https://code.videolan.org/videolan/vlc/-/issues/65) 0x00007ffff6f0f474 in start_thread () from /usr/lib/libpthread.so.0
[#66](https://code.videolan.org/videolan/vlc/-/issues/66) 0x00007ffff6a4a69d in clone () from /usr/lib/libc.so.6
(gdb)
The backtrace above should be enough to diagnose the issue, though I could supply input on what parts of the code that is really causing this if that is of interest (but I doubt it).