mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
gst/selector/gstinputselector.c: Do g_object_notify() only when not holding the lock to get the property because othe...
Original commit message from CVS: * gst/selector/gstinputselector.c: (gst_input_selector_set_active_pad), (gst_input_selector_switch): Do g_object_notify() only when not holding the lock to get the property because otherwise we run into a deadlock with the deep-notify handlers that are possibly installed.
This commit is contained in:
parent
1cb3f3903b
commit
29d918352b
2 changed files with 20 additions and 5 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2008-03-20 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
|
* gst/selector/gstinputselector.c:
|
||||||
|
(gst_input_selector_set_active_pad), (gst_input_selector_switch):
|
||||||
|
Do g_object_notify() only when not holding the lock to get the property
|
||||||
|
because otherwise we run into a deadlock with the deep-notify handlers
|
||||||
|
that are possibly installed.
|
||||||
|
|
||||||
2008-03-20 Wim Taymans <wim.taymans@collabora.co.uk>
|
2008-03-20 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
* gst/selector/gstinputselector.c: (gst_selector_pad_class_init),
|
* gst/selector/gstinputselector.c: (gst_selector_pad_class_init),
|
||||||
|
|
|
@ -877,8 +877,9 @@ gst_segment_set_start (GstSegment * segment, gint64 running_time)
|
||||||
segment->start += duration;
|
segment->start += duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this function must be called with the SELECTOR_LOCK. */
|
/* this function must be called with the SELECTOR_LOCK. It returns TRUE when the
|
||||||
static void
|
* active pad changed. */
|
||||||
|
static gboolean
|
||||||
gst_input_selector_set_active_pad (GstInputSelector * self,
|
gst_input_selector_set_active_pad (GstInputSelector * self,
|
||||||
GstPad * pad, gint64 stop_time, gint64 start_time)
|
GstPad * pad, gint64 stop_time, gint64 start_time)
|
||||||
{
|
{
|
||||||
|
@ -886,7 +887,7 @@ gst_input_selector_set_active_pad (GstInputSelector * self,
|
||||||
GstPad **active_pad_p;
|
GstPad **active_pad_p;
|
||||||
|
|
||||||
if (pad == self->active_sinkpad)
|
if (pad == self->active_sinkpad)
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
old = GST_SELECTOR_PAD_CAST (self->active_sinkpad);
|
old = GST_SELECTOR_PAD_CAST (self->active_sinkpad);
|
||||||
new = GST_SELECTOR_PAD_CAST (pad);
|
new = GST_SELECTOR_PAD_CAST (pad);
|
||||||
|
@ -925,7 +926,7 @@ gst_input_selector_set_active_pad (GstInputSelector * self,
|
||||||
GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT,
|
GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT,
|
||||||
self->active_sinkpad);
|
self->active_sinkpad);
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (self), "active-pad");
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1213,14 +1214,20 @@ static void
|
||||||
gst_input_selector_switch (GstInputSelector * self, GstPad * pad,
|
gst_input_selector_switch (GstInputSelector * self, GstPad * pad,
|
||||||
gint64 stop_time, gint64 start_time)
|
gint64 stop_time, gint64 start_time)
|
||||||
{
|
{
|
||||||
|
gboolean changed;
|
||||||
|
|
||||||
g_return_if_fail (self->blocked == TRUE);
|
g_return_if_fail (self->blocked == TRUE);
|
||||||
|
|
||||||
GST_INPUT_SELECTOR_LOCK (self);
|
GST_INPUT_SELECTOR_LOCK (self);
|
||||||
|
changed =
|
||||||
gst_input_selector_set_active_pad (self, pad, stop_time, start_time);
|
gst_input_selector_set_active_pad (self, pad, stop_time, start_time);
|
||||||
|
|
||||||
self->blocked = FALSE;
|
self->blocked = FALSE;
|
||||||
GST_INPUT_SELECTOR_BROADCAST (self);
|
GST_INPUT_SELECTOR_BROADCAST (self);
|
||||||
GST_INPUT_SELECTOR_UNLOCK (self);
|
GST_INPUT_SELECTOR_UNLOCK (self);
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
g_object_notify (G_OBJECT (self), "active-pad");
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
Loading…
Reference in a new issue