glsyncmeta: ensure that the Fence is going to be executed
authorMatthew Waters <matthew@centricular.com>
Tue, 19 May 2015 06:14:39 +0000 (16:14 +1000)
committerMatthew Waters <matthew@centricular.com>
Tue, 19 May 2015 14:36:48 +0000 (00:36 +1000)
Otherwise it could stay client side without being submitted to the GL
server resulting in another context waiting on a Fence that will never
become signalled causing a deadlock.

gst-libs/gst/gl/gstglsyncmeta.c

index db48f02cf314fff38b1ed2ade628c59e91056ae9..be275da816fa29fe5632629f95be08b0ffc96025 100644 (file)
@@ -68,9 +68,8 @@ _set_sync_point (GstGLContext * context, GstGLSyncMeta * sync_meta)
       gl->DeleteSync (sync_meta->glsync);
     sync_meta->glsync = gl->FenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
     GST_LOG ("setting sync object %p", sync_meta->glsync);
-  } else {
-    gl->Flush ();
   }
+  gl->Flush ();
 }
 
 void
@@ -100,9 +99,6 @@ _wait (GstGLContext * context, GstGLSyncMeta * sync_meta)
 void
 gst_gl_sync_meta_wait (GstGLSyncMeta * sync_meta, GstGLContext * context)
 {
-  if (sync_meta->context == context)
-    return;
-
   if (sync_meta->glsync) {
     gst_gl_context_thread_add (context,
         (GstGLContextThreadFunc) _wait, sync_meta);