From d23b08203e32f8f50991a48132eb3c2236b4efc0 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Fri, 13 Jan 2012 11:43:35 +0100
Subject: OSX Fix: Catch releaseImpl's glFinish() exception (DebugGL); Make
 GLContext.release's setCurrent(null) exception prone.

Catch releaseImpl's glFinish() exception (DebugGL)
  glGetError() after glFinish() (eg. w/ debug pipeline) produced unknown error 0x0506
  on OS X (10.7.2 NV).

Make GLContext.release's setCurrent(null) exception prone
  Call setCurrent(null) in finalizer block to ensure it's 'released' out of the TLS
  even when an exception is being thrown.

Make MacOSX Shared Resources 'destroy' more error prone (catch exceptions)
---
 .../jogamp/opengl/macosx/cgl/MacOSXCGLContext.java     | 18 ++++++++++++++++--
 .../opengl/macosx/cgl/MacOSXCGLDrawableFactory.java    | 13 ++++++++++---
 2 files changed, 26 insertions(+), 5 deletions(-)

(limited to 'src/jogl/classes/jogamp/opengl/macosx')

diff --git a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
index 0ba7a99cd..522640294 100644
--- a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
+++ b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
@@ -536,7 +536,14 @@ public abstract class MacOSXCGLContext extends GLContextImpl
     }
 
     public boolean release(long ctx) {
-      gl.glFinish(); // w/o glFinish() OSX < 10.7 (NVidia driver) may freeze 
+      try {
+          gl.glFinish(); // w/o glFinish() OSX < 10.7 (NVidia driver) may freeze
+      } catch (GLException gle) {
+          if(DEBUG) {
+            System.err.println("MacOSXCGLContext.NSOpenGLImpl.release: INFO: glFinish() catched exception:");
+            gle.printStackTrace();              
+          }
+      }
       final boolean res = CGL.clearCurrentContext(ctx);
       final long cglCtx = CGL.getCGLContext(ctx);
       if(0 == cglCtx) {
@@ -640,7 +647,14 @@ public abstract class MacOSXCGLContext extends GLContextImpl
     }
 
     public boolean release(long ctx) {
-      gl.glFinish(); // w/o glFinish() OSX < 10.7 (NVidia driver) may freeze 
+      try {
+          gl.glFinish(); // w/o glFinish() OSX < 10.7 (NVidia driver) may freeze
+      } catch (GLException gle) {
+          if(DEBUG) {
+            System.err.println("MacOSXCGLContext.CGLImpl.release: INFO: glFinish() catched exception:");
+            gle.printStackTrace();              
+          }
+      }
       int err = CGL.CGLSetCurrentContext(0);
       if(DEBUG && CGL.kCGLNoError != err) {
           System.err.println("CGL: Could not release current context: err 0x"+Integer.toHexString(err)+": "+this);
diff --git a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
index e1810fd63..5c6486799 100644
--- a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
@@ -231,11 +231,18 @@ public class MacOSXCGLDrawableFactory extends GLDrawableFactoryImpl {
                         }
                     } catch (GLException gle) {
                         if (DEBUG) {
-                            System.err.println("MacOSXCGLDrawableFactory.createShared: INFO: makeCurrent failed");
+                            System.err.println("MacOSXCGLDrawableFactory.createShared: INFO: makeCurrent catched exception:");
                             gle.printStackTrace();
                         }
                     } finally {
-                        context.destroy();
+                        try {
+                            context.destroy();
+                        } catch (GLException gle) {
+                            if (DEBUG) {
+                                System.err.println("MacOSXCGLDrawableFactory.createShared: INFO: destroy catched exception:");
+                                gle.printStackTrace();
+                            }                            
+                        }
                     }
                 }
                 drawable.destroy();
@@ -266,7 +273,7 @@ public class MacOSXCGLDrawableFactory extends GLDrawableFactoryImpl {
         }
     } catch (GLException gle) {
         if(DEBUG) {
-            System.err.println("Catched Exception while MaxOSXCGL Shared Resource initialization");
+            System.err.println("Catched Exception while MaxOSXCGL Shared Resource initialization:");
             gle.printStackTrace();
         }
     }
-- 
cgit v1.2.3