From d431ef71907ba6c7be78777e4ac9f5794af5d60e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 21 Dec 2017 13:47:52 +0200 Subject: [PATCH] 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. --- plugins/elements/gstdownloadbuffer.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/elements/gstdownloadbuffer.c b/plugins/elements/gstdownloadbuffer.c index beff9dba37..6f67e78b63 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);