[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