Skip to content

Commit

Permalink
gluploadelement: Avoid race condition in propose_allocation().
Browse files Browse the repository at this point in the history
The inside upload and context may have race condition in the function
of propose_allocation(). They may be destroyed while this function is
stilling using it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/916>
  • Loading branch information
HeJunyan authored and GStreamer Merge Bot committed Nov 5, 2020
1 parent e8bb524 commit 297a155
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions ext/gl/gstgluploadelement.c
Expand Up @@ -212,19 +212,32 @@ _gst_gl_upload_element_propose_allocation (GstBaseTransform * bt,
GstQuery * decide_query, GstQuery * query)
{
GstGLUploadElement *upload = GST_GL_UPLOAD_ELEMENT (bt);
GstGLContext *context = GST_GL_BASE_FILTER (bt)->context;
GstGLUpload *ul;
GstGLContext *context;
gboolean ret;

if (!upload->upload)
GST_OBJECT_LOCK (upload);
if (!upload->upload) {
GST_OBJECT_UNLOCK (upload);
return FALSE;
if (!context)
}
ul = gst_object_ref (upload->upload);
GST_OBJECT_UNLOCK (upload);

context = gst_gl_base_filter_get_gl_context (GST_GL_BASE_FILTER (bt));
if (!context) {
gst_object_unref (ul);
return FALSE;
}

gst_gl_upload_set_context (upload->upload, context);
gst_gl_upload_set_context (ul, context);

ret = GST_BASE_TRANSFORM_CLASS (parent_class)->propose_allocation (bt,
decide_query, query);
gst_gl_upload_propose_allocation (upload->upload, decide_query, query);
gst_gl_upload_propose_allocation (ul, decide_query, query);

gst_object_unref (ul);
gst_object_unref (context);

return ret;
}
Expand Down

0 comments on commit 297a155

Please sign in to comment.