Signed-off-by: Samuel Pitoiset <[email protected]>
---
 src/mesa/main/syncobj.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/syncobj.c b/src/mesa/main/syncobj.c
index 98938ed59c..c23f4dede9 100644
--- a/src/mesa/main/syncobj.c
+++ b/src/mesa/main/syncobj.c
@@ -226,10 +226,9 @@ _mesa_IsSync(GLsync sync)
 }
 
 
-void GLAPIENTRY
-_mesa_DeleteSync(GLsync sync)
+static ALWAYS_INLINE void
+delete_sync(struct gl_context *ctx, GLsync sync, bool no_error)
 {
-   GET_CURRENT_CONTEXT(ctx);
    struct gl_sync_object *syncObj;
 
    /* From the GL_ARB_sync spec:
@@ -243,21 +242,30 @@ _mesa_DeleteSync(GLsync sync)
    }
 
    syncObj = _mesa_get_and_ref_sync(ctx, sync, true);
-   if (!syncObj) {
-      _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteSync (not a valid sync 
object)");
+   if (!no_error && !syncObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glDeleteSync (not a valid sync object)");
       return;
    }
 
    /* If there are no client-waits or server-waits pending on this sync, delete
     * the underlying object. Note that we double-unref the object, as
-    * _mesa_get_and_ref_sync above took an extra refcount to make sure the 
pointer
-    * is valid for us to manipulate.
+    * _mesa_get_and_ref_sync above took an extra refcount to make sure the
+    * pointer is valid for us to manipulate.
     */
    syncObj->DeletePending = GL_TRUE;
    _mesa_unref_sync_object(ctx, syncObj, 2);
 }
 
 
+void GLAPIENTRY
+_mesa_DeleteSync(GLsync sync)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   delete_sync(ctx, sync, false);
+}
+
+
 static GLsync
 fence_sync(struct gl_context *ctx, GLenum condition, GLbitfield flags)
 {
-- 
2.13.3

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to