[PATCH] Fixed simple-egl tear-down order to prevent a crash on exit time.

Pekka Paalanen ppaalanen at gmail.com
Mon Apr 22 02:48:43 PDT 2013


On Fri, 19 Apr 2013 17:49:12 +0000
"Yeh, Sinclair" <sinclair.yeh at intel.com> wrote:

> wl_egl_window_destory() distroys 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 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/clients/simple-egl.c b/clients/simple-egl.c index
> 26ebe5c..f4468b7 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);

Wow, now that you actually point this out, it's pretty obvious. Though,
are you sure there is no Mesa bug to be fixed here?

The patch looks good to me.


Thanks,
pq


More information about the wayland-devel mailing list