Since upgrade to pulseaudio-5.0, there seem to be cases where card profile struct isn't fully initialized (name field particularly), so experience crashes in applications that don't handle this. Examples include: gnome-settings-daemon, gnome-shell ( see http://bugzilla.gnome.org/732952 ) and pavucontrol (here). (gdb) backtrace #0 __strcmp_sse4_2 () at ../sysdeps/i386/i686/multiarch/strcmp-sse4.S:217 #1 0x0806ea50 in operator() (this=0xbfffe8e8, lhs=..., lhs=..., rhs=..., rhs=...) at mainwindow.cc:43 #2 _M_get_insert_unique_pos (__k=..., this=0xbfffe8e8) at /usr/include/c++/4.8.2/bits/stl_tree.h:1324 #3 std::_Rb_tree<pa_card_profile_info, pa_card_profile_info, std::_Identity<pa_card_profile_info>, profile_prio_compare, std::allocator<pa_card_profile_info> >::_M_insert_unique (this=0xbfffe8e8, __v=...) at /usr/include/c++/4.8.2/bits/stl_tree.h:1377 #4 0x0806a5cd in insert (__x=..., this=0xbfffe8e8) at /usr/include/c++/4.8.2/bits/stl_set.h:463 #5 MainWindow::updateCard (this=0x8264400, info=...) at mainwindow.cc:319 #6 0xb6c9f06a in context_get_card_info_callback (pd=pd@entry=0x8218b20, command=command@entry=2, tag=tag@entry=5, t=t@entry=0x82c7cc8, userdata=userdata@entry=0x82cb8c8) at pulse/introspect.c:971 #7 0xb64618b0 in run_action (pd=0x8218b20, r=0x82cb9a0, command=2, ts=0x82c7cc8) at pulsecore/pdispatch.c:279 #8 0xb6461cd0 in pa_pdispatch_run (pd=0x8218b20, packet=packet@entry=0x82cd6f0, creds=creds@entry=0x82841a8, userdata=userdata@entry=0x825c430) at pulsecore/pdispatch.c:331 #9 0xb6c909c5 in pstream_packet_callback (p=p@entry=0x8284000, packet=0x82cd6f0, creds=0x82841a8, userdata=userdata@entry=0x825c430) at pulse/context.c:335 #10 0xb646686b in do_read (p=0x8284000) at pulsecore/pstream.c:830 #11 do_pstream_read_write (p=0x8284000) at pulsecore/pstream.c:185 #12 0xb6451230 in callback (m=m@entry=0x826d734, e=e@entry=0x82cb898, fd=9, f=PA_IO_EVENT_INPUT, userdata=0x80d6068) at pulsecore/iochannel.c:160 #13 0xb6cd6adf in dispatch_func (source=source@entry=0x826d700, callback=0x0, userdata=0x0) at pulse/glib-mainloop.c:586 #14 0xb6d23556 in g_main_dispatch (context=0x80d6200) at gmain.c:3066 #15 g_main_context_dispatch (context=context@entry=0x80d6200) at gmain.c:3642 #16 0xb6d23920 in g_main_context_iterate (context=0x80d6200, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3713 #17 0xb6d23dc3 in g_main_loop_run (loop=loop@entry=0x8218ac8) at gmain.c:3907 #18 0xb74246dd in gtk_main () at gtkmain.c:1158 #19 0xb7deba05 in Gtk::Main::run_impl (this=0xbfffee1c) at main.cc:440 #20 0xb7dec03b in Gtk::Main::run (window=...) at main.cc:399 #21 0x08053e18 in main (argc=1, argv=0xbfffef34) at pavucontrol.cc:683
$ rpm -q pulseaudio pavucontrol pulseaudio-5.0-6.fc20.i686 pavucontrol-2.0-4.fc20.i686
$ pactl info Server String: unix:/run/user/1482/pulse/native Library Protocol Version: 29 Server Protocol Version: 29 Is Local: yes Client Index: 17 Tile Size: 65496 User Name: rdieter1 Host Name: math-171.unl.edu Server Name: pulseaudio Server Version: 5.0 Default Sample Specification: s16le 2ch 44100Hz Default Channel Map: front-left,front-right Default Sink: alsa_output.pci-0000_00_1b.0.analog-stereo Default Source: alsa_input.pci-0000_00_1b.0.analog-stereo Cookie: 5f51:4518 $ pactl list ... Card #0 Name: alsa_card.pci-0000_00_1b.0 Driver: module-alsa-card.c Owner Module: 6 Properties: alsa.card = "0" alsa.card_name = "HDA Intel PCH" alsa.long_card_name = "HDA Intel PCH at 0xf7c30000 irq 45" alsa.driver_name = "snd_hda_intel" device.bus_path = "pci-0000:00:1b.0" sysfs.path = "/devices/pci0000:00/0000:00:1b.0/sound/card0" device.bus = "pci" device.vendor.id = "8086" device.vendor.name = "Intel Corporation" device.product.id = "1e20" device.product.name = "7 Series/C210 Series Chipset Family High Definition Audio Controller" device.form_factor = "internal" device.string = "0" device.description = "Built-in Audio" module-udev-detect.discovered = "1" device.icon_name = "audio-card-pci" Profiles: input:analog-stereo: Analog Stereo Input (sinks: 0, sources: 1, priority: 60, available: yes) output:analog-stereo: Analog Stereo Output (sinks: 1, sources: 0, priority: 6000, available: yes) output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (sinks: 1, sources: 1, priority: 6060, available: yes) output:hdmi-stereo: Digital Stereo (HDMI) Output (sinks: 1, sources: 0, priority: 5400, available: yes) output:hdmi-stereo+input:analog-stereo: Digital Stereo (HDMI) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 5460, available: yes) output:hdmi-surround: Digital Surround 5.1 (HDMI) Output (sinks: 1, sources: 0, priority: 300, available: yes) output:hdmi-surround+input:analog-stereo: Digital Surround 5.1 (HDMI) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 360, available: yes) output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) Output (sinks: 1, sources: 0, priority: 5200, available: yes) output:hdmi-stereo-extra1+input:analog-stereo: Digital Stereo (HDMI 2) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 5260, available: yes) output:hdmi-surround-extra1: Digital Surround 5.1 (HDMI 2) Output (sinks: 1, sources: 0, priority: 100, available: yes) output:hdmi-surround-extra1+input:analog-stereo: Digital Surround 5.1 (HDMI 2) Output + Analog Stereo Input (sinks: 1, sources: 1, priority: 160, available: yes) off: Off (sinks: 0, sources: 0, priority: 0, available: yes) Active Profile: output:analog-stereo+input:analog-stereo Ports: analog-input-front-mic: Front Microphone (priority: 8500, latency offset: 0 usec, not available) Properties: device.icon_name = "audio-input-microphone" Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround+input:analog-stereo, output:hdmi-stereo-extra1+input:analog-stereo, output:hdmi-surround-extra1+input:analog-stereo analog-input-rear-mic: Rear Microphone (priority: 8200, latency offset: 0 usec, not available) Properties: device.icon_name = "audio-input-microphone" Part of profile(s): input:analog-stereo, output:analog-stereo+input:analog-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround+input:analog-stereo, output:hdmi-stereo-extra1+input:analog-stereo, output:hdmi-surround-extra1+input:analog-stereo analog-output: Analog Output (priority: 9900, latency offset: 0 usec) Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo analog-output-lineout: Line Out (priority: 9900, latency offset: 0 usec, not available) Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo analog-output-speaker: Speakers (priority: 10000, latency offset: 0 usec) Properties: device.icon_name = "audio-speakers" Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo analog-output-headphones: Headphones (priority: 9000, latency offset: 0 usec, not available) Properties: device.icon_name = "audio-headphones" Part of profile(s): output:analog-stereo, output:analog-stereo+input:analog-stereo hdmi-output-0: HDMI / DisplayPort (priority: 5900, latency offset: 0 usec, not available) Properties: device.icon_name = "video-display" Part of profile(s): output:hdmi-stereo, output:hdmi-stereo+input:analog-stereo, output:hdmi-surround, output:hdmi-surround+input:analog-stereo hdmi-output-1: HDMI / DisplayPort 2 (priority: 5800, latency offset: 0 usec, not available) Properties: device.icon_name = "video-display" Part of profile(s): output:hdmi-stereo-extra1, output:hdmi-stereo-extra1+input:analog-stereo, output:hdmi-surround-extra1, output:hdmi-surround-extra1+input:analog-stereo
Confirmed problem remains testing against pulseaudio master branch as of today.
For posterity, adding comment from Tanu about how best to debug this further from onlist: The comment in the Gnome bug is correct: PulseAudio should be fixed to never set card profile names to NULL. How to debug: first see the code in src/pulse/introspect.c and figure out how it could pass NULL names to applications. Even if the server sends NULL names, libpulse should handle that by closing the connection due to protocol error, and not pass the NULL names to applications. I see that both fill_card_port_info() fill_card_profile_info() have insufficient input validation regarding profile names. If you fix that, and the result is that now clients get disconnected due to bad data from the server, the next step is to add assertions about NULL names to the server code (src/pulsecore/protocol-native.c) to the places where profile names are sent to clients. The assertions should cause the server to crash, and hopefully the backtraces from those crashes can point to the root cause of the problem.
I found one possible cause, between the 4.0 snapshot fedora 20 shipped with (f81e3) and pulseaudio-5.0, came this ABI break(1): http://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/?id=85e7fbc196f4424f68e530c2e3a01d9b941f293e I'll try to do more testing over the next day or 2 to confirm this suspicion. If positive, yuck, will have to think deeply on how best to handle fixing it downstream. 1. strictly speaking, it was fixing/restoring a prior break introduced in 4.0 development
That sounds quite likely explanation for the pavucontrol crash. IIRC Mageia had the same problem. To fix the problem (or to confirm that it's a different issue after all) you just need to rebuild everything that depends on libpulse - is that hard to do in Fedora?
rebuilding everything hard? no, just annoying and tedious... but will likely be the least bad way forward.
Confirmed downstream issue only, rebuilt pavucontrol behaves better.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.