Here are the backtraces from Linux version 0.44.07 obtained in "game is permanently frozen but sound is still playing" state.
If you could provide an unstripped build with debug symols on (gcc -ggdb) we would get to the bottom of this much quicker.
Threads
(gdb) info threads
Id Target Id Frame
* 1 Thread 0x7f721809bac0 (LWP 26758) "Dwarf_Fortress" 0x00007f72156ab666 in futex_abstimed_wait_cancelable (private=0, abstime=0x0, expected=0, futex_word=0x3b2b750)
at ../sysdeps/unix/sysv/linux/futex-internal.h:205
2 Thread 0x7f720841e700 (LWP 26759) "Dwarf_Fortress" 0x00007f7216af565d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
3 Thread 0x7f7207c1d700 (LWP 26760) "Dwarf_Fortress" 0x000000000042c200 in ?? ()
4 Thread 0x7f7206f6e700 (LWP 26762) "threaded-ml" 0x00007f7216b1da5d in poll () at ../sysdeps/unix/syscall-template.S:84
5 Thread 0x7f7218098700 (LWP 26763) "Dwarf_Fortress" 0x00007f72156a8b26 in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x3b9897c)
at ../sysdeps/unix/sysv/linux/futex-internal.h:88
(gdb)
Thread 1 backtrace
(gdb) bt full
#0 0x00007f72156ab666 in futex_abstimed_wait_cancelable (private=0, abstime=0x0, expected=0, futex_word=0x3b2b750) at ../sysdeps/unix/sysv/linux/futex-internal.h:205
__ret = -512
oldtype = 0
err = <optimized out>
#1 0x00007f72156ab666 in do_futex_wait (sem=sem@entry=0x3b2b750, abstime=0x0) at sem_waitcommon.c:111
#2 0x00007f72156ab724 in __new_sem_wait_slow (sem=0x3b2b750, abstime=0x0) at sem_waitcommon.c:181
_buffer = {__routine = 0x7f72156ab620 <__sem_wait_cleanup>, __arg = 0x3b2b750, __canceltype = -462519984, __prev = 0x0}
err = <optimized out>
d = 0
#3 0x00007f7217ca08f2 in SDL_SemWait () at /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#4 0x00007f7217654655 in enablerst::async_wait() () at /home/alpha/tmp/games/dwarf_fortress/44.07/libs/libgraphics.so
#5 0x00007f7217654a75 in enablerst::do_frame() () at /home/alpha/tmp/games/dwarf_fortress/44.07/libs/libgraphics.so
#6 0x00007f7217654f71 in enablerst::eventLoop_SDL() () at /home/alpha/tmp/games/dwarf_fortress/44.07/libs/libgraphics.so
#7 0x00007f72176556f2 in enablerst::loop(std::string) () at /home/alpha/tmp/games/dwarf_fortress/44.07/libs/libgraphics.so
#8 0x00007f7217650326 in main () at /home/alpha/tmp/games/dwarf_fortress/44.07/libs/libgraphics.so
#9 0x00007f7216a5b561 in __libc_start_main (main=
0x4050c0 <main@plt>, argc=1, argv=0x7ffde46e8408, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffde46e83f8) at ../csu/libc-start.c:297
result = <optimized out>
unwind_buf =
{cancel_jmp_buf = {{jmp_buf = {0, -475004550623105853, 4231254, 140728435901440, 0, 0, 473928362793528515, 543913849520680131}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x7ffde46e8418, 0x7f7218109150}, data = {prev = 0x0, cleanup = 0x0, canceltype = -462519272}}}
not_first_call = <optimized out>
#10 0x000000000040907f in ()
(gdb)
Thread 2 backtrace
(gdb) thread 2
[Switching to thread 2 (Thread 0x7f720841e700 (LWP 26759))]
#0 0x00007f7216af565d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
84 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) bt full
#0 0x00007f7216af565d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
#1 0x00007f7217ca2d05 in SDL_Delay () at /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#2 0x00007f7217ca2d52 in () at /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#3 0x00007f7217c60f98 in () at /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#4 0x00007f7217ca0679 in () at /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#5 0x00007f72156a2519 in start_thread (arg=0x7f720841e700) at pthread_create.c:456
__res = <optimized out>
pd = 0x7f720841e700
now = <optimized out>
unwind_buf =
{cancel_jmp_buf = {{jmp_buf = {140127741536000, -475002729393394493, 140728435900478, 140728435900479, 140127808266944, 140127741536000, 543918555782606019, 543907909074840771}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
#6 0x00007f7216b27a4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
(gdb)
Thread 3 backtrace
(gdb) thread 3
[Switching to thread 3 (Thread 0x7f7207c1d700 (LWP 26760))]
#0 0x000000000042c200 in ?? ()
(gdb) bt full
#0 0x000000000042c200 in ()
#1 0x000000000089275a in ()
#2 0x0000000001104b97 in ()
#3 0x000000000111137d in ()
#4 0x000000000070f3bc in ()
#5 0x000000000073f709 in ()
#6 0x00007f721766feb2 in interfacest::loop() () at /home/alpha/tmp/games/dwarf_fortress/44.07/libs/libgraphics.so
#7 0x00000000009b627e in mainloop() ()
#8 0x00007f72176541c5 in enablerst::async_loop() () at /home/alpha/tmp/games/dwarf_fortress/44.07/libs/libgraphics.so
#9 0x00007f72176544e0 in call_loop(void*) () at /home/alpha/tmp/games/dwarf_fortress/44.07/libs/libgraphics.so
#10 0x00007f7217c60f98 in () at /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#11 0x00007f7217ca0679 in () at /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#12 0x00007f72156a2519 in start_thread (arg=0x7f7207c1d700) at pthread_create.c:456
__res = <optimized out>
pd = 0x7f7207c1d700
now = <optimized out>
unwind_buf =
{cancel_jmp_buf = {{jmp_buf = {140127733143296, -475002729393394493, 140728435900574, 140728435900575, 140127808266944, 140127733143296, 543946043036429507, 543907909074840771}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
#13 0x00007f7216b27a4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
(gdb)
Thread 4 backtrace
(gdb) thread 4
[Switching to thread 4 (Thread 0x7f7206f6e700 (LWP 26762))]
#0 0x00007f7216b1da5d in poll () at ../sysdeps/unix/syscall-template.S:84
84 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) bt full
#0 0x00007f7216b1da5d in poll () at ../sysdeps/unix/syscall-template.S:84
#1 0x00007f72161076b1 in () at /usr/lib/x86_64-linux-gnu/libpulse.so.0
#2 0x00007f72160f9070 in pa_mainloop_poll () at /usr/lib/x86_64-linux-gnu/libpulse.so.0
#3 0x00007f72160f9700 in pa_mainloop_iterate () at /usr/lib/x86_64-linux-gnu/libpulse.so.0
#4 0x00007f72160f9790 in pa_mainloop_run () at /usr/lib/x86_64-linux-gnu/libpulse.so.0
#5 0x00007f72161075f9 in () at /usr/lib/x86_64-linux-gnu/libpulse.so.0
#6 0x00007f7214121c58 in () at /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-11.1.so
#7 0x00007f72156a2519 in start_thread (arg=0x7f7206f6e700) at pthread_create.c:456
__res = <optimized out>
pd = 0x7f7206f6e700
now = <optimized out>
unwind_buf =
{cancel_jmp_buf = {{jmp_buf = {140127719843584, -475002729393394493, 140728435900334, 140728435900335, 62491328, 140127719843584, 543948629143612611, 543907909074840771}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
#8 0x00007f7216b27a4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
(gdb)
Thread 5 backtrace
(gdb) thread 5
[Switching to thread 5 (Thread 0x7f7218098700 (LWP 26763))]
#0 0x00007f72156a8b26 in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x3b9897c) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
88 ../sysdeps/unix/sysv/linux/futex-internal.h: No such file or directory.
(gdb) bt full
#0 0x00007f72156a8b26 in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x3b9897c) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
__ret = -512
oldtype = 0
err = <optimized out>
spin = 0
buffer = {__routine = 0x7f72156a8960 <__condvar_cleanup_waiting>, __arg = 0x7f7218097a60, __canceltype = 63213064, __prev = 0x0}
cbuffer = {wseq = 79591, cond = 0x3b98950, mutex = 0x3cbe560, private = 0}
err = <optimized out>
g = 1
flags = <optimized out>
signals = 0
result = 0
seq = 39795
#1 0x00007f72156a8b26 in __pthread_cond_wait_common (abstime=0x0, mutex=0x3cbe560, cond=0x3b98950) at pthread_cond_wait.c:502
spin = 0
buffer = {__routine = 0x7f72156a8960 <__condvar_cleanup_waiting>, __arg = 0x7f7218097a60, __canceltype = 63213064, __prev = 0x0}
cbuffer = {wseq = 79591, cond = 0x3b98950, mutex = 0x3cbe560, private = 0}
err = <optimized out>
g = 1
flags = <optimized out>
signals = 0
result = 0
seq = 39795
#2 0x00007f72156a8b26 in __pthread_cond_wait (cond=0x3b98950, mutex=0x3cbe560) at pthread_cond_wait.c:655
#3 0x00007f7216107c98 in pa_threaded_mainloop_wait () at /usr/lib/x86_64-linux-gnu/libpulse.so.0
#4 0x00007f72071c4f99 in () at /usr/lib/x86_64-linux-gnu/libopenal.so
#5 0x00007f72071ca007 in () at /usr/lib/x86_64-linux-gnu/libopenal.so
#6 0x00007f72156a2519 in start_thread (arg=0x7f7218098700) at pthread_create.c:456
__res = <optimized out>
pd = 0x7f7218098700
now = <optimized out>
unwind_buf =
{cancel_jmp_buf = {{jmp_buf = {140128006276864, -475002729393394493, 140728435900270, 140728435900271, 62017600, 140128006276864, 543883984517098691, 543907909074840771}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
#7 0x00007f7216b27a4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
(gdb)