Bug 95135

Summary: Conflicting symbol between json-c and glib can break clients
Product: PulseAudio Reporter: Ahmed S. Darwish <darwish.07>
Component: daemonAssignee: pulseaudio-bugs
Status: RESOLVED FIXED QA Contact: pulseaudio-bugs
Severity: blocker    
Priority: medium CC: lennart
Version: unspecified   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description Ahmed S. Darwish 2016-04-25 17:21:12 UTC
Somewhere between PulseAudio v8.0 and master commit 0f48b7c82378c32194b625d1fd886eee7f1e5928, Totem failes with the following errors:

$ GST_DEBUG=2 PULSE_LOG=4 totem brown.wav

Parsing configuration file '/home/darwish/.config/pulse/client.conf'
/home/darwish/.config/pulse/client.conf.d does not exist, ignoring.
Using shared memory pool with 1024 slots of size 64.0 KiB each, total size is 64.0 MiB, maximum usable slot size is 65472
Trying to connect to /run/user/1000/pulse/native...
SHM possible: yes
Protocol version: remote 30, local 30
Negotiated SHM: yes
0:00:00.275566120 24621      0x161f040 WARN    basesrc gstbasesrc.c:3486:gst_base_src_start_complete:<source> pad not activated yet
0:00:00.275902725 24621      0x161f040 WARN    basesrc gstbasesrc.c:3486:gst_base_src_start_complete:<source> pad not activated yet
Format info property 'format.sample_format' type is not string.
0:00:00.285102434 24621      0x21f11e0 WARN    pulse pulsesink.c:2167:gst_pulsesink_query_getcaps:<audio-sink-actual-sink-pulse> Could not create probe stream
0:00:00.365375427 24621 0x7f82c40ffb70 WARN    pulse pulsesink.c:2167:gst_pulsesink_query_getcaps:<audio-sink-actual-sink-pulse> Could not create probe stream
0:00:00.374087966 24621 0x7f82c40ffb70 WARN    pulse pulsesink.c:2167:gst_pulsesink_query_getcaps:<audio-sink-actual-sink-pulse> Could not create probe stream
0:00:00.374392912 24621 0x7f82c40ffb70 WARN    playsink gstplaysink.c:2916:gen_audio_chain:<playsink> error: Failed to configure the audio sink.
0:00:00.375476196 24621 0x7f82c40ffb70 WARN    wavparse gstwavparse.c:2261:gst_wavparse_loop:<wavparse0> error: Internal data flow error.
0:00:00.375555318 24621 0x7f82c40ffb70 WARN    wavparse gstwavparse.c:2261:gst_wavparse_loop:<wavparse0> error: streaming task paused, reason not-linked (-1)
0:00:00.442942584 24621      0x161f040 ERROR   default totem-gst-helpers.c:61:totem_gst_message_print: message = Internal GStreamer error: pad problem.  Please file a bug at http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer.
0:00:00.442996447 24621      0x161f040 ERROR   default totem-gst-helpers.c:63:totem_gst_message_print: domain  = 5890 (gst-core-error-quark)
0:00:00.443018667 24621      0x161f040 ERROR   default totem-gst-helpers.c:64:totem_gst_message_print: code    = 5
0:00:00.443030278 24621      0x161f040 ERROR   default totem-gst-helpers.c:65:totem_gst_message_print: debug   = gstplaysink.c(2916): gen_audio_chain (): /GstPlayBin:play/GstPlaySink:playsink:
Failed to configure the audio sink.
0:00:00.443040339 24621      0x161f040 ERROR   default totem-gst-helpers.c:66:totem_gst_message_print: source  = <playsink>
0:00:00.443050652 24621      0x161f040 ERROR   default totem-gst-helpers.c:67:totem_gst_message_print: uri     = (NULL)

Meanwhile, on PulseAudio v8.0, everything runs smoothly and Totem is able to play the file without _any_ errors.

Bug extracted from mailing list discussions here: http://article.gmane.org/gmane.comp.audio.pulseaudio.general/25788
Comment 1 Ahmed S. Darwish 2016-04-25 17:23:30 UTC
Marked as a v9.0 release blocker
Comment 2 Arun Raghavan 2016-04-27 13:03:28 UTC
We have the root cause of this bug. The options are to revert the offending patch for 9.0 (leaving the underlying problem unaddressed, but this is not a regression). The alternative is to look at merging my patches to drop json-c as a dep soon. Root cause from email discussion follows:

----

Okay, so this is a fun one. The offending commit is:

  commit 12a202c510dcacbd2b85fcc1170484eb16fef491
  Author: Arun Raghavan <git@arunraghavan.net>
  Date:   Thu Dec 31 09:27:56 2015 +0530

      format: Make pa_format_info_valid() stricter for PCM
   
      We should do stricter validation when we can.

The check fails at:

  if (json_object_get_type(o) != json_type_string) {
      pa_log_debug("Format info property '%s' type is not string.", key);
      json_object_put(o);
      return -PA_ERR_INVALID;
  }

Rhythmbox and Totem are linked to the json-glib library which *also*
has a json_object_get_type(). That is the function which gets called,
and returns a junk type which makes this code fail.
Comment 3 Tanu Kaskinen 2016-04-27 13:16:18 UTC
(In reply to Arun Raghavan from comment #2)
> We have the root cause of this bug. The options are to revert the offending
> patch for 9.0 (leaving the underlying problem unaddressed, but this is not a
> regression). The alternative is to look at merging my patches to drop json-c
> as a dep soon.

My vote goes to reverting the offending patch.
Comment 4 Arun Raghavan 2016-05-03 03:53:25 UTC
Reverted the patch, so dropping as a blocker. Keeping this open (and changing the description) since I'd like a better fix to go in for 10.0.
Comment 5 Tanu Kaskinen 2016-06-02 13:24:31 UTC
Fixed in the "next" branch.

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.