Using Helm + Sitala together crashes Ardour

Software
OS: Arch
Ardour version: Ardour6.2.0 (built using 6.2 and GCC version 10.1.0)
Helm version: Helm 0.9.0
Sitala version: sitala beta 2

Behavior
I can create a session with multiple tracking using various plugins as expected.
I can add a Helm track (VST or LV2).
I can add a Sitala track.

If I create a session with both Helm and Sitala tracks, Ardour crashes when I attempt to open the Helm plugin UI.

This continues between reboots of Ardour, Jack, and my computer. It continues if I delete the existing Helm track and try to add another one (again, LV2 or VST).

Error
Running Ardour from the cli gives me this error:

ardour-6.2.0: ../nptl/pthread_mutex_lock.c:81: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.

Should I file a bug report or is this purely a plugin issue?

This smells like a plugin issue.

We’ve seen issues like this when plugins were dynamically linked and exposed symbols.
Since all plugins share the same memory space they must be self-contained and not rely or provide external resources that may conflict with other plugins.

In short plugins must be statically linked and not expose any symbols.
The former can be check with ldd helm.so; ldd sitala.so – that should only list libc*, libX* and similar mandatory system libs.
More importantly check the latter with objdump -t helm.so; objdump -t sitala.so – The output must be empty: “no symbols”. Otherwise the plugin symbols may conflict.

1 Like

Thanks for confirming it was a plugin issue (and for still helping me troubleshoot)

For anyone else running into this issue, here’s what I found:

  • ldd helm-synth.so and ldd sitala.so both share a lot of libs, this is the only thing shared between them that doesn’t sart with lib*
    • linux-vdso.so.1

Also, while objdump -t helm.so returned no symbols, objdump -t sitala.so returned a bunch of not that.

Chalking this one up to a sitala issue I guess.
Thanks for the help Robin

That’s bad news. Ideally they should be statically linked and not depend on any system-wide libs at all (safe for 3, 4 mandatory libs, like libc, that have versioned symbols, and libX11 that needs to match the X server).

To be certain, a backtrace would be needed: https://ardour.org/debugging_ardour

Ardour6 --gdb
(gdb) run
# make it crash
(gdb) thread apply all bt

When plugins are not statically linked (nor hide symbols), a plugin may a function with the same name from a foreign lib (or even from another plugin). e.g. Helm may call a publicly exposed function from Sitala. Or Sitala may call a function from a library that is pulled in by Helm (or Ardour).

The latter is a issue that has caused the following crash: https://github.com/lucianodato/noise-repellent/issues/63 – which was easily fixed.

@x42 should I post a stacktrace here?

posting it on tracker.arduour.org would be preferable.