eglTerminate should destroy the contexts and surfaces of the display.

Signed-off-by: Chia-I Wu <olva...@gmail.com>
---
 src/egl/main/egldisplay.c |   21 +++++++++++++++++++++
 src/egl/main/egldisplay.h |    4 ++++
 src/egl/main/egldriver.c  |    4 +---
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c
index 8c3dfda..6f3d5eb 100644
--- a/src/egl/main/egldisplay.c
+++ b/src/egl/main/egldisplay.c
@@ -108,6 +108,27 @@ _eglFindDisplay(NativeDisplayType nativeDisplay)
 }
 
 
+void
+_eglReleaseDisplayResources(_EGLDriver *drv, EGLDisplay dpy)
+{
+   _EGLDisplay *display = _eglLookupDisplay(dpy);
+   _EGLContext *contexts = display->ContextList;
+   _EGLSurface *surfaces = display->SurfaceList;
+
+   while (contexts) {
+      EGLContext handle = _eglGetContextHandle(contexts);
+      contexts = contexts->Next;
+      drv->API.DestroyContext(drv, dpy, handle);
+   }
+
+   while (surfaces) {
+      EGLSurface handle = _eglGetSurfaceHandle(surfaces);
+      surfaces = surfaces->Next;
+      drv->API.DestroySurface(drv, dpy, handle);
+   }
+}
+
+
 /**
  * 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 c5a7f08..d7a2e60 100644
--- a/src/egl/main/egldisplay.h
+++ b/src/egl/main/egldisplay.h
@@ -56,6 +56,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);
 
-- 
1.6.2.4


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to