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);
|
return GST_PAD (agg_pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Must be called with SRC_LOCK held */
|
/* Must be called with SRC_LOCK held, temporarily releases it! */
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_aggregator_query_latency_unlocked (GstAggregator * self, GstQuery * query)
|
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;
|
gboolean query_ret, live;
|
||||||
GstClockTime our_latency, min, max;
|
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);
|
query_ret = gst_pad_query_default (self->srcpad, GST_OBJECT (self), query);
|
||||||
|
SRC_LOCK (self);
|
||||||
|
|
||||||
if (!query_ret) {
|
if (!query_ret) {
|
||||||
GST_WARNING_OBJECT (self, "Latency query failed");
|
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)) {
|
if (min > max && GST_CLOCK_TIME_IS_VALID (max)) {
|
||||||
|
SRC_UNLOCK (self);
|
||||||
GST_ELEMENT_WARNING (self, CORE, CLOCK, (NULL),
|
GST_ELEMENT_WARNING (self, CORE, CLOCK, (NULL),
|
||||||
("Impossible to configure latency: max %" GST_TIME_FORMAT " < min %"
|
("Impossible to configure latency: max %" GST_TIME_FORMAT " < min %"
|
||||||
GST_TIME_FORMAT ". Add queues or other buffering elements.",
|
GST_TIME_FORMAT ". Add queues or other buffering elements.",
|
||||||
GST_TIME_ARGS (max), GST_TIME_ARGS (min)));
|
GST_TIME_ARGS (max), GST_TIME_ARGS (min)));
|
||||||
|
SRC_LOCK (self);
|
||||||
return FALSE;
|
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
|
* See gst_aggregator_get_latency() for doc
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue