glx: unify GLX_SGIX_pbuffer aliased declarations
[mesa.git] / src / glx / apple / apple_glx_surface.c
index d42fa3b326915aacbc34685fa7569cac250107e9..51583bb40bc582ba14b52e6a1a00a4e2939a78fb 100644 (file)
@@ -124,7 +124,7 @@ surface_destroy(Display * dpy, struct apple_glx_drawable *d)
    }
 }
 
-/* Return true if an error occured. */
+/* Return true if an error occurred. */
 static bool
 create_surface(Display * dpy, int screen, struct apple_glx_drawable *d)
 {
@@ -158,7 +158,7 @@ create_surface(Display * dpy, int screen, struct apple_glx_drawable *d)
    return true;                 /* unable to create a surface. */
 }
 
-/* Return true if an error occured. */
+/* Return true if an error occurred. */
 /* This returns a referenced object via resultptr. */
 bool
 apple_glx_surface_create(Display * dpy, int screen,
@@ -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);
+      }
    }
 }