[AL] Fix runtime crash when OpenAL not available
authorthefiddler <stapostol@gmail.com>
Mon, 29 Sep 2014 21:37:40 +0000 (23:37 +0200)
committerthefiddler <stapostol@gmail.com>
Mon, 29 Sep 2014 21:37:40 +0000 (23:37 +0200)
Issue reported at http://www.opentk.com/node/3805

We must not throw exceptions from a finalizer, as this leads to the
runtime forcibly taking down the application.

Source/OpenTK/Audio/AudioDeviceEnumerator.cs

index 6b3f741..a5ffea8 100644 (file)
@@ -204,12 +204,22 @@ namespace OpenTK.Audio
             {
                 Debug.Unindent();
 
-                // clean up the dummy context
-                Alc.MakeContextCurrent(ContextHandle.Zero);
-                if (dummy_context != ContextHandle.Zero && dummy_context.Handle != IntPtr.Zero)
-                    Alc.DestroyContext(dummy_context);
-                if (dummy_device != IntPtr.Zero)
-                    Alc.CloseDevice(dummy_device);
+                if (openal_supported)
+                {
+                    try
+                    {
+                        // clean up the dummy context
+                        Alc.MakeContextCurrent(ContextHandle.Zero);
+                        if (dummy_context != ContextHandle.Zero && dummy_context.Handle != IntPtr.Zero)
+                            Alc.DestroyContext(dummy_context);
+                        if (dummy_device != IntPtr.Zero)
+                            Alc.CloseDevice(dummy_device);
+                    }
+                    catch
+                    {
+                        openal_supported = false;
+                    }
+                }
             }
         }