From 952e6df8fc688938f278597d0e01faa39f7f71ba Mon Sep 17 00:00:00 2001 From: "Yeh, Sinclair" Date: Fri, 19 Apr 2013 17:49:12 +0000 Subject: [PATCH] Fix simple-egl tear-down order to prevent a crash on exit time 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 | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/clients/simple-egl.c b/clients/simple-egl.c index 26ebe5ce..f4468b7a 100644 --- a/clients/simple-egl.c +++ b/clients/simple-egl.c @@ -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);