splitmuxsink: Don't take lock during posting message

An application might try to access splitmuxsink from sync message handler
by g_object_{get,set} which takes lock also. In general, we don't
take lock around message handler.
This commit is contained in:
Seungha Yang 2019-10-07 12:45:00 +09:00 committed by Tim-Philipp Müller
parent 7606c0eb7c
commit a441779d39

View file

@ -3161,6 +3161,7 @@ set_next_filename (GstSplitMuxSink * splitmux, MqStreamCtx * ctx)
}
}
/* called with GST_SPLITMUX_LOCK */
static void
do_async_start (GstSplitMuxSink * splitmux)
{
@ -3175,10 +3176,14 @@ do_async_start (GstSplitMuxSink * splitmux)
GST_INFO_OBJECT (splitmux, "Sending async_start message");
message = gst_message_new_async_start (GST_OBJECT_CAST (splitmux));
GST_SPLITMUX_UNLOCK (splitmux);
GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST
(splitmux), message);
GST_SPLITMUX_LOCK (splitmux);
}
/* called with GST_SPLITMUX_LOCK */
static void
do_async_done (GstSplitMuxSink * splitmux)
{
@ -3186,13 +3191,15 @@ do_async_done (GstSplitMuxSink * splitmux)
if (splitmux->async_pending) {
GST_INFO_OBJECT (splitmux, "Sending async_done message");
splitmux->async_pending = FALSE;
GST_SPLITMUX_UNLOCK (splitmux);
message =
gst_message_new_async_done (GST_OBJECT_CAST (splitmux),
GST_CLOCK_TIME_NONE);
GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST
(splitmux), message);
splitmux->async_pending = FALSE;
GST_SPLITMUX_LOCK (splitmux);
}
splitmux->need_async_start = FALSE;