After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 392189 - [esdsink] pipeline hung in state change from PAUSED to PLAYING
[esdsink] pipeline hung in state change from PAUSED to PLAYING
Status: RESOLVED INCOMPLETE
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
0.10.2
Other Linux
: Normal normal
: NONE
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2007-01-03 05:58 UTC by Jay.Tan
Modified: 2007-06-26 14:28 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
The esdsink which I modified (693 bytes, patch)
2007-01-05 04:03 UTC, Jay.Tan
none Details | Review

Description Jay.Tan 2007-01-03 05:58:59 UTC
When the state of esdsink was set from  GST_STATED_PAUSED to GST_STATE_PLAYING, the process hung. It hungs because that the esd-client want to get latency from the esd-server but failed by using esd_get_latency of esdlib.
Comment 1 Tim-Philipp Müller 2007-01-04 11:05:20 UTC
You mean esd_get_latency() returns -1 and _get_delay() then returns huge delay values messing up everything else?

Does this commit fix it?

http://webcvs.freedesktop.org/gstreamer/gst-plugins-good/ext/esd/esdsink.c?r1=1.64&r2=1.65

 2007-01-04  Tim-Philipp Müller  <tim at centricular dot net>

       * ext/esd/esdsink.c: (gst_esdsink_delay):
         Don't return bogus values when esd_get_delay() fails (#392189).


Comment 2 Jay.Tan 2007-01-05 04:03:20 UTC
Created attachment 79424 [details] [review]
The esdsink which I modified
Comment 3 Jay.Tan 2007-01-05 04:04:01 UTC
I'am sorry that this commit can not fix this bug.
The esd-server handle a requirement from the esd-client by several loop operations. When the esd-client want to play a sound stream, it will send a requirment to the esd-server. If this channel was authenticated by the esd-server, the esd-client began to send sound stream by writting it to a buffer and the esd-server read the stream from the buffer.
  When the state of esdsink was set from GST_STATE_PLAYING to GST_STATE_PAUSED, the esd-client will stop to write sound stream into the buffer. But the esd-server still want to get data from the buffer and if can't, it will be blocked here. When you set the state of esdsink from GST_STATE_PAUSED back to GST_STATE_PLAYING, the esdsink must get the latency from the server and then start to write the buffer. But, unfortunately, the esd-client can't get the latency because the esd-server was blocked. So the esd-client didn't write stream into the buffer. The esd-server  was also blocked because it can't read data from the buffer. This situation is similar to Dead-Lock.
  I modified esdsink to bypass this bug. But it was not so good:)
 
Comment 4 Jan Schmidt 2007-03-12 14:56:40 UTC
Jay,

I don't understand how your modifications to esdsink would fix the problem you describe. Can you explain the thinking behind it?

 
Comment 5 Tim-Philipp Müller 2007-05-03 12:23:25 UTC
Jay: ping? Any chance you could answer Jan's questions?
Comment 6 Tim-Philipp Müller 2007-06-26 14:28:39 UTC
Closing this bug report as no further information has been provided. Please feel free to reopen this bug if you can provide the information asked for.
Thanks!