Ticket #218 (closed defect: invalid)

Opened 4 years ago

Last modified 4 years ago

PulseAudio crashes very quickly when resample-method is src-sink-* or speex-*-10

Reported by: erik@… Owned by: lennart
Milestone: Component: daemon
Keywords: resampler segfault Cc:

Description

When resample (both general and in combine) is src-sink-* or speech-*-10, pulseaudio segfaults very quickly. When it's speex-fixed-8, it takes a bit longer but eventually also segfaults.

I haven't tried the other resamplers yet.

Change History

  Changed 4 years ago by AstralStorm

Doesn't happen here on any of the three machines. (x86, x86-64) Please provide more information. Maybe you have a broken or "overoptimized" system.

Which version of pulseaudio crashes?

  Changed 4 years ago by lennart

Uh. Are you sure this segfault depends on the resampler settings?

Please provide a backtrace for this issue.

Which PA version are you running?

  Changed 4 years ago by lennart

  • status changed from new to closed
  • resolution set to invalid

Closing, because no response in two months

  Changed 4 years ago by erik@…

  • status changed from closed to reopened
  • resolution invalid deleted

  Changed 4 years ago by erik@…

Somehow I didn't receive the updates by email (although I did get this one...)

AstralStorm?:

This is what I use: x86-64 with fedora 8, I have pulseaudio installed from fedora 9: pulseaudio-0.9.8-5.fc9.x86_64. Both the versions from 8 and 9 exhibit the problem.

I do not have a "broken" or "overoptimized" system. All is really standard/default fedora. Also I happen to be systems administrator in real life, so I tend to know when a system is broken.

Lennart:

Sure, sure, ehm, no, I did not write the code ;-) I only can say that the time that elapses before pulseaudio crashes depends on the resample configuration. The higher the resampling quality, the faster pulseaudio crashes.

I'd really like to send you the backtrace (I guess you mean the output of gdb "where") but I have trouble getting gdb to work on pulseaudio, it has something to do with the pulseaudio debug package from fedora being uncooperative. I'll have another go soon.

In the meantime, here are my configs:

client.conf: almost empty

default.pa: #!/usr/bin/pulseaudio -nF # # This file is part of PulseAudio. # # PulseAudio is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PulseAudio is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with PulseAudio; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.

.nofail

### Load something into the sample cache #load-sample-lazy x11-bell /usr/share/sounds/gtk-events/activate.wav load-sample-lazy pulse-hotplug /usr/share/sounds/startup3.wav #load-sample-lazy pulse-coldplug /usr/share/sounds/startup3.wav #load-sample-lazy pulse-access /usr/share/sounds/generic.wav

.fail

### Load audio drivers statically (it's probably better to not load ### these drivers manually, but instead use module-hal-detect -- ### see below -- for doing this automatically)

#load-module module-alsa-sink #load-module module-oss device="/dev/dsp" sink_name=output source_name=input #load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input #load-module module-null-sink #load-module module-pipe-sink

### Automatically load driver modules depending on the hardware available #.ifexists /usr/lib64/pulse-0.9/modules/module-hal-detect.so #load-module module-hal-detect #.else ### Alternatively use the static hardware detection module (for systems that ### lack HAL support) #load-module module-detect #.endif

### Load several protocols #load-module module-esound-protocol-unix auth-anonymous=1 load-module module-native-protocol-unix auth-anonymous=1

### Network access (may be configured with paprefs, so leave this commented ### here if you plan to use paprefs) #load-module module-esound-protocol-tcp auth-anonymous=1 load-module module-native-protocol-tcp auth-anonymous=1 #load-module module-zeroconf-publish

### Load the RTP reciever module (also configured via paprefs, see above) #load-module module-rtp-recv

### Load the RTP sender module (also configured via paprefs, see above) #load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 description="RTP Multicast Sink" #load-module module-rtp-send source=rtp.monitor

### Automatically restore the volume of playback streams #load-module module-volume-restore

### Automatically restore the default sink/source when changed by the user during runtime #load-module module-default-device-restore

### Automatically move streams to the default sink if the sink they are ### connected to dies, similar for sources load-module module-rescue-streams

### Automatically suspend sinks/sources that become idle for too long #load-module module-suspend-on-idle

### Load X11 bell module #load-module module-x11-bell sample=x11-bell

### Publish connection data in the X11 root window #.ifexists /usr/lib64/pulse-0.9/modules//module-x11-publish.so #load-module module-x11-publish #.endif

### Register ourselves in the X11 session manager # Deactivated by default, to avoid deadlock when PA is started as esd from gnome-session # Instead we load this via /etc/xdg/autostart/ and "pactl load-module" now # load-module module-x11-xsmp

### Load additional modules from GConf settings. This can be configured with the paprefs tool. ### Please keep in mind that the modules configured by paprefs might conflict with manually ### loaded modules. #.ifexists /usr/lib64/pulse-0.9/modules//module-gconf.so #load-module module-gconf #.endif

### Make some devices default set-default-sink default #set-default-source input

#load-module module-http-protocol-tcp port=4747 #load-module module-cli load-module module-cli-protocol-unix #load-module module-cli-protocol-tcp port=4749

load-module module-null-sink sink_name=null #load-module module-alsa-sink device=hw:0,0 sink_name=alc load-module module-alsa-sink device=hw:6,0 sink_name=jvc load-module module-alsa-sink device=hw:7,0 sink_name=usb1 load-module module-alsa-sink device=hw:8,0 sink_name=usb2

load-module module-ladspa-sink sink_name=ladspa_low master=usb2 plugin=/usr/lib64/ladspa/butterworth_1902.so label=buttlow_iir control=2800,0.7071 load-module module-ladspa-sink sink_name=ladspa_high master=usb1 plugin=/usr/lib64/ladspa/butterworth_1902.so label=butthigh_iir control=3200,0.7071

#load-module module-combine adjust_time=30 resample_method=speex-float-4 sink_name=default master=jvc slaves=ladspa_low,ladspa_high load-module module-combine adjust_time=10 resample_method=trivial sink_name=default master=jvc

=======================================================

daemon.conf:

# $Id: daemon.conf.in 2067 2007-11-21 01:30:40Z lennart $ # # This file is part of PulseAudio. # # PulseAudio is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PulseAudio is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with PulseAudio; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA.

## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for ## more information. Default values a commented out. Use either ; or # for ## commenting.

daemonize = yes ; fail = yes ; disallow-module-loading = no ; use-pid-file = yes system-instance = yes ; disable-shm = no

verbose = 1

; high-priority = yes ; nice-level = -11

; realtime-scheduling = no ; realtime-priority = 5

exit-idle-time = -1 module-idle-time = -1 ; scache-idle-time = 20

dl-search-path = /usr/lib64/pulse-0.9/modules/

; default-script-file =

; log-target = auto ; log-level = notice

#resample-method =src-sinc-best-quality resample-method = speex-float-8 disable-remixing = yes

; no-cpu-limit = no

; rlimit-as = -1 ; rlimit-core = -1 ; rlimit-data = -1 ; rlimit-fsize = -1 ; rlimit-nofile = 256 ; rlimit-stack = -1 ; rlimit-nproc = -1 ; rlimit-memlock = -1 ; rlimit-nice = 31 ; rlimit-rtprio = 9

default-sample-format = s16le default-sample-rate = 48000 default-sample-channels = 2

; default-fragments = 4 ; default-fragment-size-msec = 25

  Changed 4 years ago by lennart

  Changed 4 years ago by erik@…

I do happen to know how to generate a backtrace...

The PROBLEM is that the debug rpms of fedora cover ALL packages generated from pulseaudio, not only the server. This drags all sorts of dependencies in I really do not want to install on my server, e.g. gnome.

I am considering extracting the relevant files from the package and install these. This is a pain because I really don't want orphaned files on my system.

  Changed 4 years ago by coling

rpm --nodeps ???

  Changed 4 years ago by erik@…

Ehmmm, that's almost an indecent proposal ;-)

Any self-respecting system admin will always have it dependencies clean. How can you ever cleanly upgrade when your dependencies are broken?

I'll try extracting the files as I described earlier.

  Changed 4 years ago by lennart

Hmm? After using the symbols you can the remove the package again and voila -- your dep tree is clean again.

(at least as clean as a fedora dep tree can be... which is not very clean)

follow-up: ↓ 12   Changed 4 years ago by erik@…

That's not practical when you're running pulseaudio 24/7 as a server process and I don't know when it's going to crash.

Anyway, you'll hear from me.

in reply to: ↑ 11   Changed 4 years ago by coling

Replying to erik@slagter.name:

That's not practical when you're running pulseaudio 24/7 as a server process and I don't know when it's going to crash.

Just run pulseaudio inside gdb and use it as normal until it borks. It's fairly practical :)

  Changed 4 years ago by erik@…

  • status changed from reopened to closed
  • resolution set to invalid

It doesn't occur anymore.

I have two possible explanations:

- I have installed newer versions (patch-level, not quite major) of some packages to have them exactly match the current -debug packages, maybe one of them silently fixed the crash. - High samplerate converter settings use up a lot of CPU ticks, you need to set "no-cpu-limit = yes"; I was aware of that, it seems that with my previous setup the SIGCPU signal indirectly triggered a segfault.

Anyway, I can't reproduce it with this setup, so please close.

Note: See TracTickets for help on using tickets.