Mesa (8.0): darwin: Eliminate a possible race condition while destroying a surface

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Thu May 17 01:59:51 UTC 2012


Module: Mesa
Branch: 8.0
Commit: 9724c8d13c09773dcf9674f15accd8f2f4d148ff
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9724c8d13c09773dcf9674f15accd8f2f4d148ff

Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Fri Apr 27 18:36:33 2012 -0700

darwin: Eliminate a possible race condition while destroying a surface

Introduced by: c60ffd2840036af1ea6f2b6c6e1e9014bb8e2c34
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
(cherry picked from commit d65bd195ecbd6623b962a3c98725a484ef2791a8)

---

 src/glx/apple/apple_glx_surface.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/glx/apple/apple_glx_surface.c b/src/glx/apple/apple_glx_surface.c
index d42fa3b..9155202 100644
--- a/src/glx/apple/apple_glx_surface.c
+++ b/src/glx/apple/apple_glx_surface.c
@@ -207,9 +207,6 @@ apple_glx_surface_destroy(unsigned int uid)
       d->types.surface.pending_destroy = true;
       d->release(d);
 
-      /* apple_glx_drawable_find_by_uid returns a locked drawable */
-      d->unlock(d);
-
       /* 
        * We release 2 references to the surface.  One was acquired by
        * the find, and the other was leftover from a context, or 
@@ -220,6 +217,9 @@ apple_glx_surface_destroy(unsigned int uid)
        * to actually destroy it when the pending_destroy is processed
        * by a glViewport callback (see apple_glx_context_update()).
        */
-      d->destroy(d);
+      if (!d->destroy(d)) {
+          /* apple_glx_drawable_find_by_uid returns a locked drawable */
+          d->unlock(d);
+      }
    }
 }




More information about the mesa-commit mailing list