mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 00:36:51 +00:00
aggregator: Release the SRC lock while querying latency
This is required because the query could be intercepted and the application could send any other requests to the element from this thread. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/834>
This commit is contained in:
parent
53c68d92d8
commit
63350d1930
1 changed files with 8 additions and 2 deletions
|
@ -2033,7 +2033,7 @@ gst_aggregator_request_new_pad (GstElement * element,
|
|||
return GST_PAD (agg_pad);
|
||||
}
|
||||
|
||||
/* Must be called with SRC_LOCK held */
|
||||
/* Must be called with SRC_LOCK held, temporarily releases it! */
|
||||
|
||||
static gboolean
|
||||
gst_aggregator_query_latency_unlocked (GstAggregator * self, GstQuery * query)
|
||||
|
@ -2041,7 +2041,10 @@ gst_aggregator_query_latency_unlocked (GstAggregator * self, GstQuery * query)
|
|||
gboolean query_ret, live;
|
||||
GstClockTime our_latency, min, max;
|
||||
|
||||
/* Temporarily release the lock to do the query. */
|
||||
SRC_UNLOCK (self);
|
||||
query_ret = gst_pad_query_default (self->srcpad, GST_OBJECT (self), query);
|
||||
SRC_LOCK (self);
|
||||
|
||||
if (!query_ret) {
|
||||
GST_WARNING_OBJECT (self, "Latency query failed");
|
||||
|
@ -2067,10 +2070,12 @@ gst_aggregator_query_latency_unlocked (GstAggregator * self, GstQuery * query)
|
|||
}
|
||||
|
||||
if (min > max && GST_CLOCK_TIME_IS_VALID (max)) {
|
||||
SRC_UNLOCK (self);
|
||||
GST_ELEMENT_WARNING (self, CORE, CLOCK, (NULL),
|
||||
("Impossible to configure latency: max %" GST_TIME_FORMAT " < min %"
|
||||
GST_TIME_FORMAT ". Add queues or other buffering elements.",
|
||||
GST_TIME_ARGS (max), GST_TIME_ARGS (min)));
|
||||
SRC_LOCK (self);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -2101,7 +2106,8 @@ gst_aggregator_query_latency_unlocked (GstAggregator * self, GstQuery * query)
|
|||
}
|
||||
|
||||
/*
|
||||
* MUST be called with the src_lock held.
|
||||
* MUST be called with the src_lock held. Temporarily releases the lock inside
|
||||
* gst_aggregator_query_latency_unlocked() to do the actual query!
|
||||
*
|
||||
* See gst_aggregator_get_latency() for doc
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue