DISTRHO / DISTRHO-Ports

Linux audio plugins and LV2 ports
http://distrho.sourceforge.net/ports
249 stars 44 forks source link

Vitalium VST3 freezes when resized with more than one instance open #119

Open xard-dev opened 1 year ago

xard-dev commented 1 year ago

Information

OS: 64-bit Ubuntu 22.04 Plugin Hosts: Ardour 7, Carla Plugin variant: VST3

How to reproduce

  1. add one instance of VST3 Vitalium
  2. open the instance GUI
  3. resize the GUI
  4. add second instance of VST3 Vitalium
  5. open the second instance GUI while keeping the first open
  6. resize the second instance GUI

Result

The interface freezes (does not segfault / crash).

Additional details

When tested using local debug build of the VST3 Vitalium from commit f2dbaded0a05732e3499fa374a586e5b32370da5 under carla --dbg following backtrace can be interrupted from the scenario:

0  __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, 
    futex_word=0x55555de6ba08) at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x0, clockid=0, 
    expected=0, futex_word=0x55555de6ba08) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x55555de6ba08, 
    expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, 
    private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x00007ffff7c93ac1 in __pthread_cond_wait_common (abstime=0x0, clockid=0, 
    mutex=0x55555de3a0a0, cond=0x55555de6b9e0) at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0x55555de6b9e0, mutex=0x55555de3a0a0)
    at ./nptl/pthread_cond_wait.c:627
#5  0x00007ffff2ce7165 in ?? () from /lib/x86_64-linux-gnu/libX11.so.6
#6  0x00007ffff2ce7882 in ?? () from /lib/x86_64-linux-gnu/libX11.so.6
#7  0x00007ffff2ce96bb in XLockDisplay () from /lib/x86_64-linux-gnu/libX11.so.6
#8  0x00007fffb6af0638 in juce::XWindowSystemUtilities::ScopedXLock::ScopedXLock (
    this=0x7fffffffba17)
    at ../libs/juce6/source/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp:84
#9  0x00007fffb6af5069 in juce::XWindowSystem::isMinimised (this=0x55555742e5d0, 
    windowH=62914588)
    at ../libs/juce6/source/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp:1839
#10 0x00007fffb6b5446f in juce::LinuxComponentPeer::isMinimised (this=0x55556eaf8580)
    at ../libs/juce6/source/modules/juce_gui_basics/native/juce_linux_Windowing.cpp:177
#11 0x00007fffb6a49599 in juce::Component::isShowing (this=0x55556d84e420)
    at ../libs/juce6/source/modules/juce_gui_basics/components/juce_Component.cpp:602
#12 0x00007fffb6a4ab60 in juce::Component::setBounds (this=0x55556d84e420, x=0, y=0, w=1270, 
    h=744) at ../libs/juce6/source/modules/juce_gui_basics/components/juce_Component.cpp:1108
#13 0x00007fffb6a4afca in juce::Component::setSize (this=0x55556d84e420, w=1270, h=744)
    at ../libs/juce6/source/modules/juce_gui_basics/components/juce_Component.cpp:1200
#14 0x00007fffb67338bc in juce::JuceVST3EditController::JuceVST3Editor::onSize (
    this=0x555562dd09a0, newSize=0x7fffffffbb90)
    at ../libs/juce6/source/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp:1297
...

Full backtrace: 2023-02-26_vitalium_resize_freeze_bt.log

Looks like the "freeze" comes from a XLockDisplay being reserved but never released.