diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index be3ae3937a864..afe9a9c97f1a8 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -1230,6 +1230,7 @@ dri2_display_release(_EGLDisplay *disp) if (!p_atomic_dec_zero(&dri2_dpy->ref_count)) return; + _eglCleanupDisplay(disp); dri2_display_destroy(disp); } @@ -1331,6 +1332,9 @@ dri2_egl_surface_free_local_buffers(struct dri2_egl_surface *dri2_surf) static EGLBoolean dri2_terminate(_EGLDisplay *disp) { + /* Release all non-current Context/Surfaces. */ + _eglReleaseDisplayResources(disp); + dri2_display_release(disp); return EGL_TRUE; diff --git a/src/egl/drivers/wgl/egl_wgl.c b/src/egl/drivers/wgl/egl_wgl.c index 884309a73732f..3e1fe23c01070 100644 --- a/src/egl/drivers/wgl/egl_wgl.c +++ b/src/egl/drivers/wgl/egl_wgl.c @@ -358,6 +358,7 @@ wgl_display_release(_EGLDisplay *disp) if (!p_atomic_dec_zero(&wgl_dpy->ref_count)) return; + _eglCleanupDisplay(disp); wgl_display_destroy(disp); } @@ -370,6 +371,9 @@ wgl_display_release(_EGLDisplay *disp) static EGLBoolean wgl_terminate(_EGLDisplay *disp) { + /* Release all non-current Context/Surfaces. */ + _eglReleaseDisplayResources(disp); + wgl_display_release(disp); return EGL_TRUE; diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index 804b0831be175..e20c03a6eac40 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -779,9 +779,14 @@ eglTerminate(EGLDisplay dpy) RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); if (disp->Initialized) { - _eglReleaseDisplayResources(disp); disp->Driver->Terminate(disp); - _eglCleanupDisplay(disp); + /* do not reset disp->Driver */ + disp->ClientAPIsString[0] = 0; + disp->Initialized = EGL_FALSE; + + /* Reset blob cache funcs on terminate. */ + disp->BlobCacheSet = NULL; + disp->BlobCacheGet = NULL; } simple_mtx_unlock(&disp->Mutex); diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c index 52a910272920a..39850e34f7c6d 100644 --- a/src/egl/main/egldisplay.c +++ b/src/egl/main/egldisplay.c @@ -370,13 +370,7 @@ _eglCleanupDisplay(_EGLDisplay *disp) disp->Configs = NULL; } - /* do not reset disp->Driver */ - disp->ClientAPIsString[0] = 0; - disp->Initialized = EGL_FALSE; - - /* Reset blob cache funcs on terminate. */ - disp->BlobCacheSet = NULL; - disp->BlobCacheGet = NULL; + /* XXX incomplete */ }