On Sat, Apr 19, 2014 at 12:20:26PM -0700, Chad Versace wrote:
> On Fri, Apr 18, 2014 at 03:37:38PM -0700, Sarah Sharp wrote:
> > +   eglMakeCurrent(state.egl_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, 
> > state.ctx);
> > +   XDestroyWindow(state.dpy, state.win);
> > +destroy_ctx:
> > +   eglMakeCurrent(state.egl_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, 
> > EGL_NO_CONTEXT);
> > +   eglDestroyContext(state.egl_dpy, state.ctx);
> >     eglTerminate(state.egl_dpy);
> > -
> > -   piglit_report_result(result);
> > -
> > -   return EXIT_SUCCESS;
> > +fail:
> > +   if (test->stop_on_failure)
> > +           piglit_report_result(test->result);
> > +   if (test->result == PIGLIT_PASS)
> > +           return EXIT_SUCCESS;
> > +   return EXIT_FAILURE;
> 
> I tried to convince myself that the above cleanup was correct, but I got
> dizzy. By consolidating the destroy_window and destroy_ctx into the fail
> label, I think you can achieve more concise code that's more easily
> verifiable.
> 
> fail:
>     if (state.egl_dpy) {
>         eglMakeCurrent(state.egl_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, 
> EGL_NO_CONTEXT);
>         eglTerminate(state.egl_dpy);
>     }
>     if (state.win)
>         XDestroyWindow(state.win);
>     if (test->stop_on_failure)
>       piglit_report_result(test->result);
>     if (test->result == PIGLIT_PASS)
>       return EXIT_SUCCESS;
>     return EXIT_FAILURE;

Hmm, I tried changing the error cleanup to this code, and the tests do
pass.  However, I see the odd behavior I was seeing before Rob helped me
debug the code where the windows from the first and second subtest
persist, until after the third subtest completes and
piglit_report_result is called.

However, moving the eglTerminate call after the XDestroyWindow call
makes the windows close as expected.  Any idea as to what's going on?

Sarah Sharp
_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to