AlienArena was deadlocking trying to go through OpenAl which was set to use PulseAudio. After quite a bit of debugging (entering prints in OpenAl pulse code), I finally found a solution with the help of a SUSE bug report.

http://lists.opensuse.org/opensuse-bugs/2009-10/msg10497.html

which points at this commit.

http://git.0pointer.de/?p=pulseaudio.git;a=commitdiff;h=4f5e2b745ea357e2b5c815ff33a556505a7d1f18

Here's an strace (with prints sprinkled in the OpenAl pulse code) which demonstrates the deadlock. A patch to undo the commit is at the end.

write(3, "pDeviceName:PulseAudio Software\n"..., 32) = 32
write(3, "qalcOpenDevice:PulseAudio Softwar"..., 35) = 35
mmap(NULL, 864256, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07b822d000
brk(0x626f000)                          = 0x626f000
write(2, "AL lib: pulseaudio.c:356: pulse_o"..., 39AL lib: pulseaudio.c:356: pulse_open()
) = 39
readlink("/proc/self/exe", "/usr/share/games/AlienArena/crx"..., 99) = 31
write(2, "AL lib: pulseaudio.c:362: startin"..., 62AL lib: pulseaudio.c:362: starting pa_threaded_mainloop_new()
) = 62
pipe([4, 5])                            = 0
fcntl(4, F_GETFL)                       = 0 (flags O_RDONLY)
fcntl(4, F_SETFL, O_RDONLY|O_NONBLOCK)  = 0
fcntl(5, F_GETFL)                       = 0x1 (flags O_WRONLY)
fcntl(5, F_SETFL, O_WRONLY|O_NONBLOCK)  = 0
fcntl(4, F_GETFD)                       = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
fcntl(5, F_GETFD)                       = 0
fcntl(5, F_SETFD, FD_CLOEXEC)           = 0
write(2, "AL lib: pulseaudio.c:369: startin"..., 64AL lib: pulseaudio.c:369: starting pa_threaded_mainloop_start()
) = 64
mmap(NULL, 8392704, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f07afb57000
mprotect(0x7f07afb57000, 4096, PROT_NONE) = 0
clone(child_stack=0x7f07b03571f0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f07b03579e0, tls=0x7f07b0357910, child_tidptr=0x7f07b03579e0) = 5393 write(2, "AL lib: pulseaudio.c:376: startin"..., 63AL lib: pulseaudio.c:376: starting pa_threaded_mainloop_lock()
) = 63
write(2, "AL lib: pulseaudio.c:380: startin"..., 52AL lib: pulseaudio.c:380: starting pa_context_new()
) = 52
open("/home/kelly/.pulse/client.conf", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/pulse/client.conf", O_RDONLY) = 6
fstat(6, {st_mode=S_IFREG|0644, st_size=1184, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07b833e000
read(6, "# This file is part of PulseAudio"..., 4096) = 1184
read(6, ""..., 4096)                    = 0
open("/home/kelly/.pulse-cookie", O_RDWR|O_CREAT|O_NOCTTY, 0600) = 7
fcntl(7, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
read(7, "d\321\303\334\277\346B\370\217!7\367v.H\261\273\212<\222\330))=k\360q\24g\3...@e"..., 256) = 256
fcntl(7, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}) = 0
close(7)                                = 0
close(6)                                = 0
munmap(0x7f07b833e000, 4096)            = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 6
connect(6, {sa_family=AF_FILE, path=@"/tmp/.X11-unix/X0"...}, 20) = 0
getpeername(6, {sa_family=AF_FILE, path=@"/tmp/.X11-unix/X0\22"...}, [139668041498644]) = 0
uname({sys="Linux", node="bs", ...})    = 0
access("/home/kelly/.Xauthority", R_OK) = 0
open("/home/kelly/.Xauthority", O_RDONLY) = 7
fstat(7, {st_mode=S_IFREG|0600, st_size=581, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07b833e000 read(7, "\0\0\0\4\300\250\1\7\0\0010\0\22MIT-MAGIC-COOKIE-1\0\20"..., 4096) = 581
read(7, ""..., 4096)                    = 0
close(7)                                = 0
munmap(0x7f07b833e000, 4096)            = 0
getsockname(6, {sa_family=AF_FILE, path=@"/tmp/.X11-unix/X0\22"...}, [139668041498626]) = 0
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
fcntl(6, F_SETFD, FD_CLOEXEC)           = 0
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"l\0\v\0\0\0\22\0\20\0\0\0"..., 12}, {""..., 0}, {"MIT-MAGIC-COOKIE-1"..., 18}, {"\0\0"..., 2}, {"lfn<\236\303N\331\370\32,\271y\213b;"..., 16}, {""..., 0}], 6) = 48
read(6, "\1\0\v\0\0\0c\0"..., 8)        = 8
read(6, "\230P\243\0\0\0\340\3\377\377\37\0\0\1\0\0\24\0\377\377\1\7\0\0 \10\377\0\0\0\0T"..., 396) = 396
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"b\0\5\0\f\0\0\0BIG-REQUESTS"..., 20}], 1) = 20
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\1\0\0\0\0\0\1\216\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\216\0\1\0"..., 4}], 1)    = 4
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\2\0\0\0\0\0\377\377?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"7\0\5\0\0\0\340\3k\0\0\0\10\0\0\0\377\377\377\0\24\0\6\0k\0\0\0\27\0\0\0\37"..., 44}, {NULL, 0}, {""..., 0}], 3) = 44
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\10\4\0\241\r\0\0\37\0\0\0\0\0\0\0\2046\0\0\0\0\0\0\0\0\0\0\0\0\0\0*"..., 4096) = 4096
read(6, "SelectionBox.foreground:\t#141312\n"..., 9892) = 9892
read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"b\0\5\0\t\0\340\3"..., 8}, {"XKEYBOARD"..., 9}, {"\0\0\0"..., 3}], 3) = 20
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\5\0\0\0\0\0\1\220`\232\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\220\0\2\0\1\0\0\0"..., 8}, {NULL, 0}, {""..., 0}], 3) = 8
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\1\6\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\20\0\5\0\f\0\0\0PULSE_SERVER"..., 20}, {NULL, 0}, {""..., 0}], 3) = 20
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\7\0\0\0\0\0\362\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\24\0\6\0k\0\0\0\362\1\0\0\37\0\0\0\0\0\0\0\0\1\0\0"..., 24}, {NULL, 0}, {""..., 0}], 3) = 24
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\20\0\5\0\n\0\0\0PULSE_SINK\0\0"..., 20}, {NULL, 0}, {""..., 0}], 3) = 20
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\t\0\0\0\0\0\363\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\24\0\6\0k\0\0\0\363\1\0\0\37\0\0\0\0\0\0\0\0\1\0\0"..., 24}, {NULL, 0}, {""..., 0}], 3) = 24
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\20\0\5\0\f\0\0\0PULSE_SOURCE"..., 20}, {NULL, 0}, {""..., 0}], 3) = 20
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\v\0\0\0\0\0\364\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\24\0\6\0k\0\0\0\364\1\0\0\37\0\0\0\0\0\0\0\0\1\0\0"..., 24}, {NULL, 0}, {""..., 0}], 3) = 24
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\20\0\5\0\f\0\0\0PULSE_COOKIE"..., 20}, {NULL, 0}, {""..., 0}], 3) = 20
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\r\0\0\0\0\0\365\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"\24\0\6\0k\0\0\0\365\1\0\0\37\0\0\0\0\0\0\0\0\1\0\0"..., 24}, {NULL, 0}, {""..., 0}], 3) = 24
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\0\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"<\0\2\0\0\0\340\3+\1\1\0"..., 12}, {NULL, 0}, {""..., 0}], 3) = 12
poll([{fd=6, events=POLLIN}], 1, -1)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "\1\1\20\0\0\0\0\0\31\0\240\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 32 read(6, 0x62507b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
close(6)                                = 0
open("/dev/shm/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 6
getdents(6, /* 19 entries */, 32768)    = 928
statfs("/dev/shm/", {f_type=0x1021994, f_bsize=4096, f_blocks=474383, f_bfree=474073, f_bavail=474073, f_files=474383, f_ffree=474365, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
futex(0x7f07b54b1320, FUTEX_WAKE_PRIVATE, 2147483647) = 0
open("/dev/shm/pulse-shm-3807146384", O_RDONLY|O_NOFOLLOW|O_CLOEXEC) = 7
fstat(7, {st_mode=S_IFREG|0400, st_size=67108904, ...}) = 0
mmap(NULL, 67112960, PROT_READ, MAP_SHARED, 7, 0) = 0x7f07abb56000
close(7)                                = 0
kill(12091, SIG_0)                      = -1 ESRCH (No such process)
munmap(0x7f07abb56000, 67112960)        = 0
unlink("/dev/shm/pulse-shm-3807146384") = 0
open("/dev/shm/pulse-shm-1373032762", O_RDONLY|O_NOFOLLOW|O_CLOEXEC) = 7
fstat(7, {st_mode=S_IFREG|0400, st_size=67108904, ...}) = 0
mmap(NULL, 67112960, PROT_READ, MAP_SHARED, 7, 0) = 0x7f07abb56000
close(7)                                = 0
kill(2252, SIG_0)                       = 0
munmap(0x7f07abb56000, 67112960)        = 0
open("/dev/shm/pulse-shm-3131892746", O_RDONLY|O_NOFOLLOW|O_CLOEXEC) = 7
fstat(7, {st_mode=S_IFREG|0400, st_size=67108904, ...}) = 0
mmap(NULL, 67112960, PROT_READ, MAP_SHARED, 7, 0) = 0x7f07abb56000
close(7)                                = 0
kill(2275, SIG_0)                       = 0
munmap(0x7f07abb56000, 67112960)        = 0
open("/dev/shm/pulse-shm-3868754456", O_RDONLY|O_NOFOLLOW|O_CLOEXEC) = 7
fstat(7, {st_mode=S_IFREG|0400, st_size=67108904, ...}) = 0
mmap(NULL, 67112960, PROT_READ, MAP_SHARED, 7, 0) = 0x7f07abb56000
close(7)                                = 0
kill(2347, SIG_0)                       = 0
munmap(0x7f07abb56000, 67112960)        = 0
open("/dev/shm/pulse-shm-1500027736", O_RDONLY|O_NOFOLLOW|O_CLOEXEC) = 7
fstat(7, {st_mode=S_IFREG|0400, st_size=67108904, ...}) = 0
mmap(NULL, 67112960, PROT_READ, MAP_SHARED, 7, 0) = 0x7f07abb56000
close(7)                                = 0
kill(2275, SIG_0)                       = 0
munmap(0x7f07abb56000, 67112960)        = 0
getdents(6, /* 0 entries */, 32768)     = 0
close(6)                                = 0
open("/dev/urandom", O_RDONLY|O_NOCTTY) = 6
read(6, "\235/0\251"..., 4)             = 4
close(6)                                = 0
open("/dev/shm/pulse-shm-2838507421", O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW|O_CLOEXEC, 0400) = 6
ftruncate(6, 67108904)                  = 0
mmap(NULL, 67112960, PROT_READ|PROT_WRITE, MAP_SHARED, 6, 0) = 0x7f07abb56000
close(6)                                = 0
readlink("/proc/self/exe", "/usr/share/games/AlienArena/crx"..., 99) = 31
open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/gconv/gconv-modules", O_RDONLY) = 6
fstat(6, {st_mode=S_IFREG|0644, st_size=56028, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07b833e000
read(6, "# GNU libc iconv configuration.\n#"..., 4096) = 4096
read(6, "B1.002//\nalias\tJS//\t\t\tJUS_I.B1.00"..., 4096) = 4096
read(6, "59-3\t1\nmodule\tINTERNAL\t\tISO-8859-"..., 4096) = 4096
read(6, "859-14//\nalias\tISO-IR-199//\t\tISO-"..., 4096) = 4096
read(6, "CDIC-DK-NO-A//\tEBCDIC-DK-NO-A\t1\n\n"..., 4096) = 4096
read(6, "\t\tIBM281//\t\tIBM281\t\t1\n\n#\tfrom\t\t\tt"..., 4096) = 4096
read(6, "\tIBM863\t\t1\n\n#\tfrom\t\t\tto\t\t\tmodule\t"..., 4096) = 4096
read(6, "//\t\tIBM937//\nalias\tCSIBM937//\t\tIB"..., 4096) = 4096
read(6, "JAPANESE//\tEUC-JP//\nalias\tOSF0003"..., 4096) = 4096
read(6, "MACINTOSH//\t\tMACINTOSH\t1\n\n#\tfrom\t"..., 4096) = 4096
read(6, "367-BOX//\nalias\tISO_10367BOX//\t\tI"..., 4096) = 4096
read(6, "EUC-JISX0213//\t\tINTERNAL\t\tEUC-JIS"..., 4096) = 4096
brk(0x6290000)                          = 0x6290000
read(6, "/\t\tIBM1130//\nalias\tCSIBM1130//\t\tI"..., 4096) = 4096
read(6, "\t1\n\n#\tfrom\t\t\tto\t\t\tmodule\t\tcost\nal"..., 4096) = 2780
read(6, ""..., 4096)                    = 0
close(6)                                = 0
munmap(0x7f07b833e000, 4096)            = 0
futex(0x7f07b4e73f60, FUTEX_WAKE_PRIVATE, 2147483647) = 0
write(2, "AL lib: pulseaudio.c:391: startin"..., 67AL lib: pulseaudio.c:391: starting pa_context_set_state_callback()
) = 67
write(2, "AL lib: pulseaudio.c:394: startin"..., 56AL lib: pulseaudio.c:394: starting pa_context_connect()
) = 56
stat("/home/kelly/.pulse", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
getuid()                                = 1000
getuid()                                = 1000
stat("/tmp/pulse-kelly", 0x7fff1b04b700) = -1 ENOENT (No such file or directory)
stat("/home/kelly", {st_mode=S_IFDIR|0711, st_size=102400, ...}) = 0
getuid()                                = 1000
umask(077)                              = 022
mkdir("/home/kelly/.pulse", 0700)       = -1 EEXIST (File exists)
umask(022)                              = 077
getuid()                                = 1000
getgid()                                = 100
chown("/home/kelly/.pulse", 1000, 100)  = 0
chmod("/home/kelly/.pulse", 0700)       = 0
lstat("/home/kelly/.pulse", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
open("/var/lib/dbus/machine-id", O_RDONLY) = 6
fstat(6, {st_mode=S_IFREG|0644, st_size=33, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f07b833e000
read(6, "6b55d410fb2deb37ac9eac75490b5f47\n"..., 4096) = 33
close(6)                                = 0
munmap(0x7f07b833e000, 4096)            = 0
readlink("/home/kelly/.pulse/6b55d410fb2deb37ac9eac75490b5f47-runtime", "/tmp/pulse-RwKSB1FebW39"..., 99) = 23 lstat("/tmp/pulse-RwKSB1FebW39", {st_mode=S_IFDIR|0700, st_size=24, ...}) = 0
getuid()                                = 1000
socket(PF_FILE, SOCK_STREAM, 0)         = 6
fcntl(6, F_GETFD)                       = 0
fcntl(6, F_SETFD, FD_CLOEXEC)           = 0
setsockopt(6, SOL_SOCKET, SO_PRIORITY, [6], 4) = 0
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(6, {sa_family=AF_FILE, path="/home/kelly/.pulse/6b55d410fb2deb37ac9eac75490b5f47-runtime/native"...}, 110) = 0 write(2, "AL lib: pulseaudio.c:407: startin"..., 58AL lib: pulseaudio.c:407: starting pa_context_get_state()
) = 58
nanosleep({0, 1000000}, NULL)           = 0
write(2, "AL lib: pulseaudio.c:429: startin"..., 92AL lib: pulseaudio.c:429: starting pa_threaded_mainloop_wait(), state=PA_CONTEXT_CONNECTING
) = 92
futex(0x624d150, FUTEX_UNLOCK_PI_PRIVATE, 0) = 0
futex(0x624d2b4, FUTEX_WAIT_PRIVATE, 1, NULL) = 0
write(2, "AL lib: pulseaudio.c:431: startin"..., 65AL lib: pulseaudio.c:431: starting pa_threaded_mainloop_accept()
) = 65
futex(0x624d2f4, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x624d2f0, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1 write(2, "AL lib: pulseaudio.c:429: startin"..., 93AL lib: pulseaudio.c:429: starting pa_threaded_mainloop_wait(), state=PA_CONTEXT_AUTHORIZING
) = 93
futex(0x624d150, FUTEX_UNLOCK_PI_PRIVATE, 0) = 0
futex(0x624d2b4, FUTEX_WAIT_PRIVATE, 3, NULL
***** It's deadlocked here *****

Here's a patch which undoes the mentioned commit and gets everything working.

--- ./src/pulse/thread-mainloop.c.orig 2009-08-10 12:07:12.000000000 -0600
+++ ./src/pulse/thread-mainloop.c    2009-12-23 00:31:44.994003640 -0700
@@ -51,7 +51,7 @@

 struct pa_threaded_mainloop {
     pa_mainloop *real_mainloop;
-    int n_waiting, n_waiting_for_accept;
+    int n_waiting;

     pa_thread* thread;
     pa_mutex* mutex;
@@ -190,12 +190,8 @@ void pa_threaded_mainloop_signal(pa_thre

     pa_cond_signal(m->cond, 1);

-    if (wait_for_accept) {
-        m->n_waiting_for_accept ++;
-
-        while (m->n_waiting_for_accept > 0)
-            pa_cond_wait(m->accept_cond, m->mutex);
-    }
+    if (wait_for_accept && m->n_waiting > 0)
+        pa_cond_wait(m->accept_cond, m->mutex);
 }

 void pa_threaded_mainloop_wait(pa_threaded_mainloop *m) {
@@ -218,9 +214,6 @@ void pa_threaded_mainloop_accept(pa_thre
/* Make sure that this function is not called from the helper thread */ pa_assert(!m->thread || !pa_thread_is_running(m->thread) || !in_worker(m));

-    pa_assert(m->n_waiting_for_accept > 0);
-    m->n_waiting_for_accept --;
-
     pa_cond_signal(m->accept_cond, 0);
 }


_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

Reply via email to