Mono friendly safe handles
authorMarek Safar <marek.safar@gmail.com>
Fri, 17 Apr 2015 12:28:21 +0000 (14:28 +0200)
committerMarek Safar <marek.safar@gmail.com>
Mon, 2 May 2016 22:10:09 +0000 (00:10 +0200)
mcs/class/referencesource/mscorlib/microsoft/win32/safehandles/safefilehandle.cs
mcs/class/referencesource/mscorlib/microsoft/win32/safehandles/saferegistryhandle.cs
mcs/class/referencesource/mscorlib/microsoft/win32/safehandles/safewaithandle.cs

index d0370f8ca38b93f947c8955cb12e9457562d724f..4e5b97d87bcf30d85522cb809a8fff0240ced4af 100644 (file)
@@ -40,7 +40,13 @@ namespace Microsoft.Win32.SafeHandles {
         [ResourceConsumption(ResourceScope.Machine)]
         override protected bool ReleaseHandle()
         {
+#if MONO
+            System.IO.MonoIOError error;
+            System.IO.MonoIO.Close (handle, out error);
+            return error == System.IO.MonoIOError.ERROR_SUCCESS;
+#else
             return Win32Native.CloseHandle(handle);
+#endif
         }
     }
 }
index afe0901204763d09aebf61cd9fa67747bb00ccd1..be76290340564835c4324540b7e04c149ac42b38 100644 (file)
@@ -11,7 +11,7 @@
 // Implements Microsoft.Win32.SafeHandles.SafeRegistryHandle
 //
 // ======================================================================================
-#if !FEATURE_PAL
+#if !FEATURE_PAL || (MONO && !MOBILE)
 namespace Microsoft.Win32.SafeHandles {
     using System;
     using System.Security;
index dd0d36b7882014af4a1de035f5aa66211be076a4..5d8009ed634e398b398bae30d366d448dbc51f18 100644 (file)
@@ -60,6 +60,10 @@ namespace Microsoft.Win32.SafeHandles {
         [ResourceConsumption(ResourceScope.Machine)]
         override protected bool ReleaseHandle()
         {
+#if MONO
+            NativeEventCalls.CloseEvent_internal (handle);
+            return true;
+#else
 #if !FEATURE_CORECLR
             if (!bIsMutex || Environment.HasShutdownStarted)
                 return Win32Native.CloseHandle(handle);                
@@ -82,6 +86,7 @@ namespace Microsoft.Win32.SafeHandles {
             return bReturn;
 #else
             return Win32Native.CloseHandle(handle);
+#endif
 #endif
         }