[pulseaudio-discuss] RTP segfault/uninitialized resampler in pulse 0.9.14 ?
Erich Boleyn
erich at uruk.org
Mon Feb 2 18:22:46 PST 2009
Ed note: This is a bit long, but here is a summary:
Using RTP for multi-room music streaming, updated to Pulse 0.9.14 from
0.9.9, RTP reception new crashes with a segfault on all machines at the
first "Updating sample rate" log message.
Source of the segfault appears to be null pointer for "impl_update_rates"
function in resampler routine, perhaps uninitialized resamplers in general?
Details:
-- Gentoo 2.6.25 kernel
-- Pulseaudio 0.9.14, ebuild sets config as (I think..., this seems
to correspond to my "use" gentoo options):
--enable-largefile --disable-solaris --enable-alsa --enable-glib
--enable-tcpwrap --localstatedir=/var --disable-ltdl-install
(tried with/without --enable-samplerate and got the same results )
-- Pulseaudio config not using module-hal-detect, so I had to initialize
the "module-alsa-source" and "module-alsa-sink" modules by hand
to get around the "tsched=0" glitch-free issue.
NOTE: I apologize for the detective-y nature of this, for some reason
gdb did not want to cooperate and let me debug the pulseaudio server.
Err, hand-determined backtrace:
-- There is a "Updating sample rate" message in the log, then a segfault
at IP 0, right inside the call "pa_resampler_set_input_rate".
-- I added an assert to the resampler inside "src/pulsecore/resampler.c",
i.e.:
pa_assert(r->impl_update_rates);
...and got the following entry in the debug log on the next run (I
ignored the first few large deviations, since it seems to bounce around
a lot!):
Feb 2 17:52:21 mythtv3 pulseaudio[8409]: module-rtp-recv.c: Updating sample rate
Feb 2 17:52:21 mythtv3 pulseaudio[8409]: module-rtp-recv.c: Write index deviates by 479.95 ms, expected 500.00 ms
Feb 2 17:52:21 mythtv3 pulseaudio[8409]: resampler.c: Assertion 'r->impl_update_rates' failed at pulsecore/resampler.c:338, function pa_resampler_set_input_rate(). Aborting.
So, in the call to "pa_resampler_set_input_rate", at least some of the
data structures are uninitialized.
If I had a better idea of how the resamplers were set up in the first place,
I'd chase it down myself, but the cursory look in the "module-alsa-sink",
"sink", and "sink-input" showed no obvious culprits.
Any ideas (or just a fix ;-) on where to add the resampler initialization
in to fix this? I'm a willing ginnea-pig to help debug this, I just
don't know pulseaudio's internals right now...
Thanks all!
--
Erich Stefan Boleyn <erich at uruk.org> http://www.uruk.org/
"Reality is truly stranger than fiction; Probably why fiction is so popular"
More information about the pulseaudio-discuss
mailing list