From: Sebastian Dröge Date: Thu, 21 Dec 2017 11:47:52 +0000 (+0200) Subject: downloadbuffer: Don't hold the mutex while posint the download-complete message X-Git-Tag: 1.16.2~539 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d431ef71907ba6c7be78777e4ac9f5794af5d60e;p=platform%2Fupstream%2Fgstreamer.git downloadbuffer: Don't hold the mutex while posint the download-complete message Something might handle it from a sync message handler and call back into downloadbuffer, causing a deadlock. --- diff --git a/plugins/elements/gstdownloadbuffer.c b/plugins/elements/gstdownloadbuffer.c index beff9db..6f67e78 100644 --- a/plugins/elements/gstdownloadbuffer.c +++ b/plugins/elements/gstdownloadbuffer.c @@ -1277,19 +1277,19 @@ write_error: } completed: { + GstMessage *complete_message; + GST_LOG_OBJECT (dlbuf, "we completed the download"); dlbuf->write_pos = dlbuf->upstream_size; dlbuf->filling = FALSE; update_levels (dlbuf, dlbuf->max_level.bytes); msg = update_buffering (dlbuf); - - gst_element_post_message (GST_ELEMENT_CAST (dlbuf), - gst_message_new_element (GST_OBJECT_CAST (dlbuf), - gst_structure_new ("GstCacheDownloadComplete", - "location", G_TYPE_STRING, dlbuf->temp_location, NULL))); - + complete_message = gst_message_new_element (GST_OBJECT_CAST (dlbuf), + gst_structure_new ("GstCacheDownloadComplete", + "location", G_TYPE_STRING, dlbuf->temp_location, NULL)); GST_DOWNLOAD_BUFFER_MUTEX_UNLOCK (dlbuf); + gst_element_post_message (GST_ELEMENT_CAST (dlbuf), complete_message); if (msg != NULL) gst_element_post_message (GST_ELEMENT_CAST (dlbuf), msg);