mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-02 22:46:35 +00:00
aggregator: Rename confusingly named stream lock to flush lock
This lock is not what is commonly known as a "stream lock" in GStremer, it's not recursive and it's taken from the non-serialized FLUSH_START event. https://bugzilla.gnome.org/show_bug.cgi?id=742684
This commit is contained in:
parent
aa78cf96f4
commit
3c17c777ee
1 changed files with 16 additions and 13 deletions
|
@ -111,18 +111,18 @@ GST_DEBUG_CATEGORY_STATIC (aggregator_debug);
|
||||||
} G_STMT_END
|
} G_STMT_END
|
||||||
|
|
||||||
|
|
||||||
#define PAD_STREAM_LOCK(pad) G_STMT_START { \
|
#define PAD_FLUSH_LOCK(pad) G_STMT_START { \
|
||||||
GST_TRACE_OBJECT (pad, "Taking lock from thread %p", \
|
GST_TRACE_OBJECT (pad, "Taking lock from thread %p", \
|
||||||
g_thread_self()); \
|
g_thread_self()); \
|
||||||
g_mutex_lock(&pad->priv->stream_lock); \
|
g_mutex_lock(&pad->priv->flush_lock); \
|
||||||
GST_TRACE_OBJECT (pad, "Took lock from thread %p", \
|
GST_TRACE_OBJECT (pad, "Took lock from thread %p", \
|
||||||
g_thread_self()); \
|
g_thread_self()); \
|
||||||
} G_STMT_END
|
} G_STMT_END
|
||||||
|
|
||||||
#define PAD_STREAM_UNLOCK(pad) G_STMT_START { \
|
#define PAD_FLUSH_UNLOCK(pad) G_STMT_START { \
|
||||||
GST_TRACE_OBJECT (pad, "Releasing lock from thread %p", \
|
GST_TRACE_OBJECT (pad, "Releasing lock from thread %p", \
|
||||||
g_thread_self()); \
|
g_thread_self()); \
|
||||||
g_mutex_unlock(&pad->priv->stream_lock); \
|
g_mutex_unlock(&pad->priv->flush_lock); \
|
||||||
GST_TRACE_OBJECT (pad, "Release lock from thread %p", \
|
GST_TRACE_OBJECT (pad, "Release lock from thread %p", \
|
||||||
g_thread_self()); \
|
g_thread_self()); \
|
||||||
} G_STMT_END
|
} G_STMT_END
|
||||||
|
@ -174,7 +174,10 @@ struct _GstAggregatorPadPrivate
|
||||||
|
|
||||||
GMutex lock;
|
GMutex lock;
|
||||||
GCond event_cond;
|
GCond event_cond;
|
||||||
GMutex stream_lock;
|
/* This lock prevents a flush start processing happening while
|
||||||
|
* the chain function is also happening.
|
||||||
|
*/
|
||||||
|
GMutex flush_lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -786,7 +789,7 @@ gst_aggregator_flush_start (GstAggregator * self, GstAggregatorPad * aggpad,
|
||||||
/* Remove pad buffer and wake up the streaming thread */
|
/* Remove pad buffer and wake up the streaming thread */
|
||||||
gst_aggregator_pad_drop_buffer (aggpad);
|
gst_aggregator_pad_drop_buffer (aggpad);
|
||||||
|
|
||||||
PAD_STREAM_LOCK (aggpad);
|
PAD_FLUSH_LOCK (aggpad);
|
||||||
PAD_LOCK (aggpad);
|
PAD_LOCK (aggpad);
|
||||||
if (padpriv->pending_flush_start) {
|
if (padpriv->pending_flush_start) {
|
||||||
GST_DEBUG_OBJECT (aggpad, "Expecting FLUSH_STOP now");
|
GST_DEBUG_OBJECT (aggpad, "Expecting FLUSH_STOP now");
|
||||||
|
@ -819,7 +822,7 @@ gst_aggregator_flush_start (GstAggregator * self, GstAggregatorPad * aggpad,
|
||||||
GST_OBJECT_UNLOCK (self);
|
GST_OBJECT_UNLOCK (self);
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
}
|
}
|
||||||
PAD_STREAM_UNLOCK (aggpad);
|
PAD_FLUSH_UNLOCK (aggpad);
|
||||||
|
|
||||||
gst_aggregator_pad_drop_buffer (aggpad);
|
gst_aggregator_pad_drop_buffer (aggpad);
|
||||||
}
|
}
|
||||||
|
@ -1807,7 +1810,7 @@ gst_aggregator_pad_chain (GstPad * pad, GstObject * object, GstBuffer * buffer)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (aggpad, "Start chaining a buffer %" GST_PTR_FORMAT, buffer);
|
GST_DEBUG_OBJECT (aggpad, "Start chaining a buffer %" GST_PTR_FORMAT, buffer);
|
||||||
|
|
||||||
PAD_STREAM_LOCK (aggpad);
|
PAD_FLUSH_LOCK (aggpad);
|
||||||
|
|
||||||
if (g_atomic_int_get (&aggpad->priv->flushing) == TRUE)
|
if (g_atomic_int_get (&aggpad->priv->flushing) == TRUE)
|
||||||
goto flushing;
|
goto flushing;
|
||||||
|
@ -1836,7 +1839,7 @@ gst_aggregator_pad_chain (GstPad * pad, GstObject * object, GstBuffer * buffer)
|
||||||
gst_buffer_unref (aggpad->priv->buffer);
|
gst_buffer_unref (aggpad->priv->buffer);
|
||||||
aggpad->priv->buffer = actual_buf;
|
aggpad->priv->buffer = actual_buf;
|
||||||
PAD_UNLOCK (aggpad);
|
PAD_UNLOCK (aggpad);
|
||||||
PAD_STREAM_UNLOCK (aggpad);
|
PAD_FLUSH_UNLOCK (aggpad);
|
||||||
|
|
||||||
SRC_STREAM_BROADCAST (self);
|
SRC_STREAM_BROADCAST (self);
|
||||||
SRC_STREAM_UNLOCK (self);
|
SRC_STREAM_UNLOCK (self);
|
||||||
|
@ -1850,7 +1853,7 @@ gst_aggregator_pad_chain (GstPad * pad, GstObject * object, GstBuffer * buffer)
|
||||||
return flow_return;
|
return flow_return;
|
||||||
|
|
||||||
flushing:
|
flushing:
|
||||||
PAD_STREAM_UNLOCK (aggpad);
|
PAD_FLUSH_UNLOCK (aggpad);
|
||||||
|
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
GST_DEBUG_OBJECT (aggpad, "We are flushing");
|
GST_DEBUG_OBJECT (aggpad, "We are flushing");
|
||||||
|
@ -1859,7 +1862,7 @@ flushing:
|
||||||
|
|
||||||
eos:
|
eos:
|
||||||
PAD_UNLOCK (aggpad);
|
PAD_UNLOCK (aggpad);
|
||||||
PAD_STREAM_UNLOCK (aggpad);
|
PAD_FLUSH_UNLOCK (aggpad);
|
||||||
|
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
GST_DEBUG_OBJECT (pad, "We are EOS already...");
|
GST_DEBUG_OBJECT (pad, "We are EOS already...");
|
||||||
|
@ -1989,7 +1992,7 @@ gst_aggregator_pad_finalize (GObject * object)
|
||||||
GstAggregatorPad *pad = (GstAggregatorPad *) object;
|
GstAggregatorPad *pad = (GstAggregatorPad *) object;
|
||||||
|
|
||||||
g_cond_clear (&pad->priv->event_cond);
|
g_cond_clear (&pad->priv->event_cond);
|
||||||
g_mutex_clear (&pad->priv->stream_lock);
|
g_mutex_clear (&pad->priv->flush_lock);
|
||||||
g_mutex_clear (&pad->priv->lock);
|
g_mutex_clear (&pad->priv->lock);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gst_aggregator_pad_parent_class)->finalize (object);
|
G_OBJECT_CLASS (gst_aggregator_pad_parent_class)->finalize (object);
|
||||||
|
@ -2027,7 +2030,7 @@ gst_aggregator_pad_init (GstAggregatorPad * pad)
|
||||||
pad->priv->buffer = NULL;
|
pad->priv->buffer = NULL;
|
||||||
g_cond_init (&pad->priv->event_cond);
|
g_cond_init (&pad->priv->event_cond);
|
||||||
|
|
||||||
g_mutex_init (&pad->priv->stream_lock);
|
g_mutex_init (&pad->priv->flush_lock);
|
||||||
g_mutex_init (&pad->priv->lock);
|
g_mutex_init (&pad->priv->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue