DISTRHO / DPF

DISTRHO Plugin Framework
ISC License
647 stars 94 forks source link

dpf vst3 re-adding to carla crashes #334

Closed dromer closed 2 years ago

dromer commented 2 years ago

(not sure if this should've been on carla or this bugtracker ..)

I have my little example hvcc plugin that just produces a sinewave with pitch and gain controls.

I can add it to carla and it plays all fine now, however if I remove it and add it again carla segfaults:

(gdb) run
Starting program: /usr/bin/python3 /usr/share/carla/carla --with-libprefix=/usr
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Detaching after fork from child process 47998]
[New Thread 0x7fffef384700 (LWP 47999)]
Carla 2.4.0 started, status:
  Python version: 3.9.2
  Qt version:     5.15.2
  PyQt version:   5.15.2
  Binary dir:     /usr/lib/carla
  Resources dir:  /usr/share/carla/resources
[New Thread 0x7fffe7fff700 (LWP 48000)]
[New Thread 0x7fffe7537700 (LWP 48001)]
Frontend pixel ratio is 1.0
[New Thread 0x7fffe4865700 (LWP 48002)]
[New Thread 0x7fffd7fff700 (LWP 48003)]
[New Thread 0x7fffd77fe700 (LWP 48004)]
libjack.so.0 loaded successfully!
[New Thread 0x7fffd6ffd700 (LWP 48005)]
[New Thread 0x7fffd6f7c700 (LWP 48006)]
[New Thread 0x7fffd6efb700 (LWP 48007)]
[New Thread 0x7fffd664d700 (LWP 48008)]
[New Thread 0x7fffd65cc700 (LWP 48009)]
[New Thread 0x7fffd5dcb700 (LWP 48010)]
[New Thread 0x7fffd48c1700 (LWP 48011)]
[New Thread 0x7fffc19a0700 (LWP 48012)]
[New Thread 0x7fffc119f700 (LWP 48013)]
[New Thread 0x7fffc099e700 (LWP 48014)]
[New Thread 0x7fffabfff700 (LWP 48015)]
[New Thread 0x7fffa37fe700 (LWP 48016)]
[New Thread 0x7fffab7fe700 (LWP 48017)]
[New Thread 0x7fffaaffd700 (LWP 48018)]
[New Thread 0x7fffaa7fc700 (LWP 48019)]
[New Thread 0x7fffa9ffb700 (LWP 48020)]
[New Thread 0x7fffa97fa700 (LWP 48021)]
[New Thread 0x7fffa8ff9700 (LWP 48022)]
[Thread 0x7fffd6efb700 (LWP 48007) exited]
[New Thread 0x7fffd6efb700 (LWP 48023)]

Thread 1 "carla" received signal SIGSEGV, Segmentation fault.
0x000000000179bea0 in ?? ()
(gdb) bt
#0  0x000000000179bea0 in ?? ()
#1  0x00007fffd49685cc in v3_cpp_obj_query_interface<v3_funknown, v3_host_application> (obj=0x179be20, 
    iid=0x7fffd496d420 <v3_host_application_iid> "X\345\225\314\333-Ii\213j\257\214\066\246", <incomplete sequence \345>, obj2=0x7fffffff9888) at ../../dpf/distrho/src/travesty/base.h:198
#2  0x00007fffd4967931 in DISTRHO::dpf_factory::create_instance (self=0x7fffd4977588 <GetPluginFactory::factoryptr>, class_id=0x7fffffff99b0 " FPDsalcX\006\316#", 
    iid=0x7fffeeb19d98 "\350\061\377\061\362\325C\001\222\216\273\356%ix\002", instance=0x7fffffff9930) at ../../dpf/distrho/src/DistrhoPluginVST3.cpp:3637
#3  0x00007fffedec389a in ?? () from /usr/lib/carla/libcarla_standalone2.so
#4  0x00007fffedec76dd in ?? () from /usr/lib/carla/libcarla_standalone2.so
#5  0x00007fffedecb7e7 in ?? () from /usr/lib/carla/libcarla_standalone2.so
#6  0x00007fffedcc2857 in ?? () from /usr/lib/carla/libcarla_standalone2.so
#7  0x00007fffedcc352b in CarlaBackend::CarlaPlugin::newJuce(CarlaBackend::CarlaPlugin::Initializer const&, char const*) () from /usr/lib/carla/libcarla_standalone2.so
#8  0x00007fffedcb9404 in CarlaBackend::CarlaPlugin::newVST3(CarlaBackend::CarlaPlugin::Initializer const&) () from /usr/lib/carla/libcarla_standalone2.so
#9  0x00007fffedbeb225 in CarlaBackend::CarlaEngine::addPlugin(CarlaBackend::BinaryType, CarlaBackend::PluginType, char const*, char const*, char const*, long, void const*, unsigned int) ()
   from /usr/lib/carla/libcarla_standalone2.so
#10 0x00007fffedbf0ed3 in CarlaBackend::CarlaEngine::loadFile(char const*) () from /usr/lib/carla/libcarla_standalone2.so
#11 0x00007ffff7660d1d in ?? () from /lib/x86_64-linux-gnu/libffi.so.7
#12 0x00007ffff7660289 in ?? () from /lib/x86_64-linux-gnu/libffi.so.7
#13 0x00007ffff7fa8360 in ?? () from /usr/lib/python3.9/lib-dynload/_ctypes.cpython-39-x86_64-linux-gnu.so
#14 0x00007ffff7fa7e05 in ?? () from /usr/lib/python3.9/lib-dynload/_ctypes.cpython-39-x86_64-linux-gnu.so
#15 0x000000000051d89b in _PyObject_MakeTpCall ()
#16 0x00000000005175ba in _PyEval_EvalFrameDefault ()
#17 0x0000000000528b63 in _PyFunction_Vectorcall ()
#18 0x000000000053bcfb in ?? ()
#19 0x0000000000516e76 in _PyEval_EvalFrameDefault ()
#20 0x0000000000528b63 in _PyFunction_Vectorcall ()
#21 0x000000000053bdb1 in ?? ()
#22 0x00007ffff74fc19a in ?? () from /usr/lib/python3/dist-packages/PyQt5/sip.cpython-39-x86_64-linux-gnu.so
#23 0x00007ffff74fc27f in ?? () from /usr/lib/python3/dist-packages/PyQt5/sip.cpython-39-x86_64-linux-gnu.so
#24 0x00007ffff2cf056a in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#25 0x00007ffff2dfcb3f in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#26 0x00007ffff26b4fae in QWidget::event(QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#27 0x00007ffff275d42e in QFrame::event(QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#28 0x00007ffff2dfd3fb in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#29 0x00007ffff6d45d33 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#30 0x00007ffff267514e in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#31 0x00007ffff267df31 in QApplication::notify(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#32 0x00007ffff2f57b0e in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#33 0x00007ffff6d45fca in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#34 0x00007ffff26cf752 in ?? () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#35 0x00007ffff26d0583 in ?? () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#36 0x00007ffff267515f in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#37 0x00007ffff2f57b0e in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#38 0x00007ffff6d45fca in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#39 0x00007ffff399354f in QGuiApplicationPrivate::processDrop(QWindow*, QMimeData const*, QPoint const&, QFlags<Qt::DropAction>, QFlags<Qt::MouseButton>, QFlags<Qt::KeyboardModifier>) ()
   from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#40 0x00007ffff3966ec8 in QWindowSystemInterface::handleDrop(QWindow*, QMimeData const*, QPoint const&, QFlags<Qt::DropAction>, QFlags<Qt::MouseButton>, QFlags<Qt::KeyboardModifier>) ()
   from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#41 0x00007ffff02ff1a8 in ?? () from /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#42 0x00007ffff030315e in ?? () from /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#43 0x00007ffff39d165d in QBasicDrag::eventFilter(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#44 0x00007ffff6d45c06 in QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#45 0x00007ffff2675198 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#46 0x00007ffff2f57b0e in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
--Type <RET> for more, q to quit, c to continue without paging--
#47 0x00007ffff6d45fca in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#48 0x00007ffff3991583 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#49 0x00007ffff396764c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#50 0x00007ffff02ef7da in ?? () from /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#51 0x00007ffff62235ad in g_main_dispatch (context=0x7fffe8005040) at ../glib/gmain.c:3337
#52 g_main_context_dispatch (context=context@entry=0x7fffe8005040) at ../glib/gmain.c:4055
#53 0x00007ffff6223808 in g_main_context_iterate (context=context@entry=0x7fffe8005040, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4131
#54 0x00007ffff622388c in g_main_context_iteration (context=0x7fffe8005040, may_block=1) at ../glib/gmain.c:4196
#55 0x00007ffff6d9d51f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#56 0x00007ffff6d4498b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#57 0x00007ffff39d07a3 in QBasicDrag::drag(QDrag*) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#58 0x00007ffff39cdaa5 in QDragManager::drag(QDrag*) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#59 0x00007ffff39cddcb in QDrag::exec(QFlags<Qt::DropAction>, Qt::DropAction) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#60 0x00007ffff28d8601 in QAbstractItemView::startDrag(QFlags<Qt::DropAction>) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#61 0x00007ffff2d4091b in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#62 0x00007ffff28d6edd in QAbstractItemView::mouseMoveEvent(QMouseEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#63 0x00007ffff2d45ac3 in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#64 0x00007ffff26b4fae in QWidget::event(QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#65 0x00007ffff275d42e in QFrame::event(QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#66 0x00007ffff2d471a3 in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#67 0x00007ffff6d45d33 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#68 0x00007ffff267514e in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#69 0x00007ffff267c04b in QApplication::notify(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#70 0x00007ffff2f57b0e in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#71 0x00007ffff6d45fca in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#72 0x00007ffff267b076 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) ()
   from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#73 0x00007ffff26cd011 in ?? () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#74 0x00007ffff26d033e in ?? () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#75 0x00007ffff267515f in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#76 0x00007ffff2f57b0e in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#77 0x00007ffff6d45fca in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#78 0x00007ffff3991583 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#79 0x00007ffff396764c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5
#80 0x00007ffff02ef7da in ?? () from /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#81 0x00007ffff62235ad in g_main_dispatch (context=0x7fffe8005040) at ../glib/gmain.c:3337
#82 g_main_context_dispatch (context=context@entry=0x7fffe8005040) at ../glib/gmain.c:4055
#83 0x00007ffff6223808 in g_main_context_iterate (context=context@entry=0x7fffe8005040, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4131
#84 0x00007ffff622388c in g_main_context_iteration (context=0x7fffe8005040, may_block=1) at ../glib/gmain.c:4196
#85 0x00007ffff6d9d51f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#86 0x00007ffff6d4498b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#87 0x00007ffff6d4cc00 in QCoreApplication::exec() () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#88 0x00007ffff2f15c5d in ?? () from /usr/lib/python3/dist-packages/PyQt5/QtWidgets.abi3.so
#89 0x000000000053f38a in ?? ()
#90 0x000000000051d89b in _PyObject_MakeTpCall ()
#91 0x00000000005175ba in _PyEval_EvalFrameDefault ()
#92 0x0000000000528b63 in _PyFunction_Vectorcall ()
#93 0x0000000000512192 in _PyEval_EvalFrameDefault ()
#94 0x00000000005106ed in ?? ()
#95 0x0000000000510497 in _PyEval_EvalCodeWithName ()
#96 0x00000000005f5be3 in PyEval_EvalCode ()
#97 0x0000000000619de7 in ?? ()
--Type <RET> for more, q to quit, c to continue without paging--
#98 0x0000000000615610 in ?? ()
#99 0x0000000000619d79 in ?? ()
#100 0x0000000000619816 in PyRun_SimpleFileExFlags ()
#101 0x000000000060d4e3 in Py_RunMain ()
#102 0x00000000005ea6e9 in Py_BytesMain ()
#103 0x00007ffff7c31d0a in __libc_start_main (main=0x5ea6b0, argc=3, argv=0x7fffffffdb58, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffdb48)
    at ../csu/libc-start.c:308
#104 0x00000000005ea5ea in _start ()
falkTX commented 2 years ago

I think I have an idea for why. JUCE hosts only set factory host context late in the plugin lifetime. likely we just need to bump its reference count so it doesnt go away.