Mesa (master): egl: Destroy display's resources upon termination.
Brian Paul
brianp at kemper.freedesktop.org
Fri Jul 17 17:57:22 UTC 2009
Module: Mesa
Branch: master
Commit: 3f7e0d5302ed0fadd794a41af6e476d2c408adc7
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3f7e0d5302ed0fadd794a41af6e476d2c408adc7
Author: Chia-I Wu <olvaffe at gmail.com>
Date: Thu Jul 16 21:21:57 2009 -0700
egl: Destroy display's resources upon termination.
eglTerminate should destroy the contexts and surfaces of the display.
Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
---
src/egl/main/egldisplay.c | 32 ++++++++++++++++++++++++++++++++
src/egl/main/egldisplay.h | 4 ++++
src/egl/main/egldriver.c | 4 +---
3 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c
index 1f1f41e..89de609 100644
--- a/src/egl/main/egldisplay.c
+++ b/src/egl/main/egldisplay.c
@@ -121,6 +121,38 @@ _eglFindDisplay(NativeDisplayType nativeDisplay)
/**
+ * Destroy the contexts and surfaces that are linked to the display.
+ */
+void
+_eglReleaseDisplayResources(_EGLDriver *drv, EGLDisplay dpy)
+{
+ _EGLDisplay *display;
+ _EGLContext *contexts;
+ _EGLSurface *surfaces;
+
+ display = _eglLookupDisplay(dpy);
+ if (!display)
+ return;
+ contexts = display->ContextList;
+ surfaces = display->SurfaceList;
+
+ while (contexts) {
+ EGLContext handle = _eglGetContextHandle(contexts);
+ contexts = contexts->Next;
+ drv->API.DestroyContext(drv, dpy, handle);
+ }
+ assert(!display->ContextList);
+
+ while (surfaces) {
+ EGLSurface handle = _eglGetSurfaceHandle(surfaces);
+ surfaces = surfaces->Next;
+ drv->API.DestroySurface(drv, dpy, handle);
+ }
+ assert(!display->SurfaceList);
+}
+
+
+/**
* Free all the data hanging of an _EGLDisplay object, but not
* the object itself.
*/
diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
index 0a6003f..30b466c 100644
--- a/src/egl/main/egldisplay.h
+++ b/src/egl/main/egldisplay.h
@@ -57,6 +57,10 @@ _eglFindDisplay(NativeDisplayType nativeDisplay);
extern void
+_eglReleaseDisplayResources(_EGLDriver *drv, EGLDisplay dpy);
+
+
+extern void
_eglCleanupDisplay(_EGLDisplay *disp);
diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c
index 43b1f51..f2a864c 100644
--- a/src/egl/main/egldriver.c
+++ b/src/egl/main/egldriver.c
@@ -284,9 +284,7 @@ _eglCloseDriver(_EGLDriver *drv, EGLDisplay dpy)
_eglLog(_EGL_DEBUG, "Closing %s", drv->Name);
- /*
- * XXX check for currently bound context/surfaces and delete them?
- */
+ _eglReleaseDisplayResources(drv, dpy);
b = drv->API.Terminate(drv, dpy);
More information about the mesa-commit
mailing list