From a441779d39670fb1d5479e782f908345aa286901 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Mon, 7 Oct 2019 12:45:00 +0900 Subject: [PATCH] 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. --- gst/multifile/gstsplitmuxsink.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gst/multifile/gstsplitmuxsink.c b/gst/multifile/gstsplitmuxsink.c index d6fd1e8422..017af54fae 100644 --- a/gst/multifile/gstsplitmuxsink.c +++ b/gst/multifile/gstsplitmuxsink.c @@ -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;