Fix simple-egl tear-down order to prevent a crash on exit time
authorYeh, Sinclair <sinclair.yeh@intel.com>
Fri, 19 Apr 2013 17:49:12 +0000 (17:49 +0000)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 1 May 2013 17:40:50 +0000 (13:40 -0400)
wl_egl_window_destory() destroys the window handle that
dri2_destroy_surface() later uses when eglTerminate() is called.

Reordering the tear down order prevents such case from occuring.

clients/simple-egl.c

index 26ebe5c..f4468b7 100644 (file)
@@ -146,11 +146,6 @@ init_egl(struct display *display, int opaque)
 static void
 fini_egl(struct display *display)
 {
-       /* Required, otherwise segfault in egl_dri2.c: dri2_make_current()
-        * on eglReleaseThread(). */
-       eglMakeCurrent(display->egl.dpy, EGL_NO_SURFACE, EGL_NO_SURFACE,
-                      EGL_NO_CONTEXT);
-
        eglTerminate(display->egl.dpy);
        eglReleaseThread();
 }
@@ -330,6 +325,12 @@ create_surface(struct window *window)
 static void
 destroy_surface(struct window *window)
 {
+       /* Required, otherwise segfault in egl_dri2.c: dri2_make_current()
+        * on eglReleaseThread(). */
+       eglMakeCurrent(window->display->egl.dpy, EGL_NO_SURFACE, EGL_NO_SURFACE,
+                      EGL_NO_CONTEXT);
+
+       eglDestroySurface(window->display->egl.dpy, window->egl_surface);
        wl_egl_window_destroy(window->native);
 
        wl_shell_surface_destroy(window->shell_surface);