I can also confirm this issue also happens to me, and that downgrading
glibmm from 2.66.1-1 to 2.64.2-2 successfully resolves the issue.

I followed similar debugging steps as r...@thoryk.com above which
produced the same backtrace, before finding this bug already reported.

What I can add is from reading the documentation of g_quark_from_static_string()
(https://docs.gtk.org/glib/func.quark_from_static_string.html)
is these particular lines seem to be of importance:

> It can be used with statically allocated strings in the main program,
> but not with statically allocated memory in dynamically loaded
> modules, if you expect to ever unload the module again

However, jackd will load jack_firewire.so three times (which means
loading and unloading its glibmm dependency three times) from the
following backtraces:

> Breakpoint 1, __dlopen (file=0x7fffffffd400 
> "/tmp/jackd2/lib/jack/jack_firewire.so", mode=258) at dlopen.c:75
> 75    dlopen.c: No such file or directory.
> (gdb) bt
> #0  __dlopen (file=0x7fffffffd400 "/tmp/jackd2/lib/jack/jack_firewire.so", 
> mode=258) at dlopen.c:75
> #1  0x00007ffff7f73f9b in check_symbol (sofile=0x5555555720f3 
> "jack_firewire.so", symbol=0x7ffff7f9b528 "jack_internal_initialize", 
> driver_dir=0x7ffff7f9b4de "/tmp/jackd2/lib/jack", res_dllhandle=0x0) at 
> ../common/JackDriverLoader.cpp:432
> #2  0x00007ffff7f7430d in jack_drivers_load (drivers=0x0) at 
> ../common/JackDriverLoader.cpp:602
> #3  0x00007ffff7f795ff in jackctl_drivers_load (server_ptr=0x55555556fbb0) at 
> ../common/JackControlAPI.cpp:390
> #4  0x00007ffff7f7a4b6 in jackctl_server_create2 (on_device_acquire=0x0, 
> on_device_release=0x0, on_device_reservation_loop=0x0) at 
> ../common/JackControlAPI.cpp:935
> #5  0x0000555555556d7d in main (argc=3, argv=0x7fffffffdfa8) at 
> ../common/Jackdmp.cpp:334


> Thread 1 "jackd" hit Breakpoint 1, __dlopen (file=0x7fffffffcfa0 
> "/tmp/jackd2/lib/jack/jack_firewire.so", mode=258) at dlopen.c:75
> 75    in dlopen.c
> (gdb) bt
> #0  __dlopen (file=0x7fffffffcfa0 "/tmp/jackd2/lib/jack/jack_firewire.so", 
> mode=258) at dlopen.c:75
> #1  0x00007ffff7f73f9b in check_symbol(file_char_t const*, char const*, 
> file_char_t const*, void**) (sofile=0x5555555720f3 "jack_firewire.so", 
> symbol=0x7ffff7f9b541 "driver_get_descriptor", driver_dir=0x7ffff7f9b4de 
> "/tmp/jackd2/lib/jack", res_dllhandle=0x7fffffffd3e8)
>     at ../common/JackDriverLoader.cpp:432
> #2  0x00007ffff7f740b0 in jack_get_descriptor(JSList*, file_char_t const*, 
> char const*, file_char_t const*) (drivers=0x0, sofile=0x5555555720f3 
> "jack_firewire.so", symbol=0x7ffff7f9b541 "driver_get_descriptor", 
> driver_dir=0x7ffff7f9b4de "/tmp/jackd2/lib/jack")
>     at ../common/JackDriverLoader.cpp:465
> #3  0x00007ffff7f74339 in jack_drivers_load(_JSList*) (drivers=0x0) at 
> ../common/JackDriverLoader.cpp:606
> #4  0x00007ffff7f795ff in jackctl_drivers_load(jackctl_server*) 
> (server_ptr=0x55555556fbb0) at ../common/JackControlAPI.cpp:390
> #5  0x00007ffff7f7a4b6 in jackctl_server_create2(bool (*)(char const*), void 
> (*)(char const*), void (*)()) (on_device_acquire=0x0, on_device_release=0x0, 
> on_device_reservation_loop=0x0) at ../common/JackControlAPI.cpp:935
> #6  0x0000555555556d7d in main(int, char**) (argc=3, argv=0x7fffffffdfa8) at 
> ../common/Jackdmp.cpp:334


> Thread 1 "jackd" hit Breakpoint 1, __dlopen (file=0x7fffffffd400 
> "/tmp/jackd2/lib/jack/jack_firewire.so", mode=258) at dlopen.c:75
> 75    in dlopen.c
> (gdb) bt
> #0  __dlopen (file=0x7fffffffd400 "/tmp/jackd2/lib/jack/jack_firewire.so", 
> mode=258) at dlopen.c:75
> #1  0x00007ffff7f73f9b in check_symbol(file_char_t const*, char const*, 
> file_char_t const*, void**) (sofile=0x5555555e5ab3 "jack_firewire.so", 
> symbol=0x7ffff7f9b528 "jack_internal_initialize", driver_dir=0x7ffff7f9b4de 
> "/tmp/jackd2/lib/jack", res_dllhandle=0x0)
>     at ../common/JackDriverLoader.cpp:432
> #2  0x00007ffff7f74511 in jack_internals_load(_JSList*) (internals=0x0) at 
> ../common/JackDriverLoader.cpp:723
> #3  0x00007ffff7f797c1 in jackctl_internals_load(jackctl_server*) 
> (server_ptr=0x55555556fbb0) at ../common/JackControlAPI.cpp:459
> #4  0x00007ffff7f7a4cb in jackctl_server_create2(bool (*)(char const*), void 
> (*)(char const*), void (*)()) (on_device_acquire=0x0, on_device_release=0x0, 
> on_device_reservation_loop=0x0) at ../common/JackControlAPI.cpp:941
> #5  0x0000555555556d7d in main(int, char**) (argc=3, argv=0x7fffffffdfa8) at 
> ../common/Jackdmp.cpp:334


So the issue here seems like glibmm should not be using
g_quark_from_static_string(), but g_quark_from_string() instead

Reply via email to