I'm not sure where exactly the problem is, probably in the alsa pulse plugin? And not sure where alsa pulse plugin should be reported, ALSA or PA? Using http://byuu.org/bsnes/ through the ALSA API with PulseAudio at some point provokes the game to block with 100% CPU usage. Stopping it I get this backtrace:
Program received signal SIGTSTP, Stopped (user). 0x00007ffff2b8a386 in poll () from /lib64/libc.so.6 (gdb) bt #0 0x00007ffff2b8a386 in poll () from /lib64/libc.so.6 #1 0x00007ffff72ac94c in snd1_pcm_wait_nocheck () from /usr/lib64/libasound.so.2 #2 0x00007ffff72accb7 in snd1_pcm_write_areas () from /usr/lib64/libasound.so.2 #3 0x00007ffff72ebf3a in snd_pcm_ioplug_writei () from /usr/lib64/libasound.so.2 #4 0x000000000043e1b8 in ruby::AudioALSA::sample (this=<value optimized out>, left=<value optimized out>, right=<value optimized out>) at lib/ruby/audio/alsa.cpp:101 #5 0x000000000043ed8b in ruby::AudioInterface::sample (this=0x74c520, left=<value optimized out>, right=<value optimized out>) at lib/ruby/ruby_audio.cpp:110 #6 0x00000000004a5b82 in SNES::sDSP::enter (this=0x8528c0) at dsp/sdsp/sdsp.cpp:199 #7 0x00000000004a309a in SNES::sSMP::op_read (this=0x851860, addr=4532) at smp/ssmp/timing/timing.cpp:8 #8 0x00000000004a2652 in SNES::sSMP::enter (this=0x851860) at smp/core/memory.hpp:2 #9 0x000000000043bec0 in ?? () at lib/libco/x86-64.c:31 #10 0x0000000000000000 in ?? ()
There are lots of snd_pcm_writei() (lib/ruby/audio/alsa.cpp:101) calls before bsnes blocks, and the only errors are some underruns that are "fixed" with snd_pcm_recover(). Just that at some point (easier to trigger with 150% or 200% emu speed) blocks. It's using the "safe ALSA" everywhere, so...
This is with openSUSE 11.1. But also with openSUSE 11.1 + PA from multimedia:libs (0.9.14) and a recent GIT snapshot of ALSA from multimedia:audio:snapshot and multimedia:audio:KMP. There is a package for Fedora in rpmfusion, and they have a readme that states the problem also happens there.
To avoid this bsnes dev created a native PA backend. I inform just in case this is triggering a bug, perhaps affecting other software, you are interested in fix...
PS. ...obviously bsnes never blocks when using ALSA directly.