[corlib] Parse datetime string using culture calendar. Fixes #18052
[mono.git] / mcs / class / corlib / System.Runtime.InteropServices / CriticalHandle.cs
index cecae15599c660c06a1a84c329234b799977e38a..ce50aff31b497782d36b4cbc5bc7e6b382aee63a 100644 (file)
@@ -1,81 +1,85 @@
-//\r
-// System.Runtime.InteropServices.CriticalHandle\r
-//\r
-// Author:\r
-//   Kazuki Oikawa  (kazuki@panicode.com)\r
-//\r
-\r
-#if NET_2_0\r
-\r
-using System;\r
-using System.Runtime.ConstrainedExecution;\r
-using System.Runtime.Serialization;\r
-\r
-namespace System.Runtime.InteropServices\r
-{\r
-       public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable\r
-       {\r
-               protected IntPtr handle;\r
-               bool _disposed = false;\r
-\r
-               protected CriticalHandle (IntPtr invalidHandleValue)\r
-               {\r
-                       handle = invalidHandleValue;\r
-               }\r
-\r
-               [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]\r
-               ~CriticalHandle ()\r
-               {\r
-                       Dispose ();\r
-               }\r
-\r
-               [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]\r
-               public void Close ()\r
-               {\r
-                       Dispose ();\r
-               }\r
-\r
-               [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]\r
-               public void Dispose ()\r
-               {\r
-                       if (_disposed)\r
-                               return;\r
-\r
-                       _disposed = true;\r
-                       if (IsInvalid)\r
-                               return;\r
-\r
-                       if (ReleaseHandle ()) {\r
-                               GC.SuppressFinalize (this);\r
-                       } else {\r
-                               // Failed in release...\r
-                       }\r
-               }\r
-\r
-               [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]\r
-               protected abstract bool ReleaseHandle ();\r
-\r
-               [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]\r
-               protected void SetHandle (IntPtr handle)\r
-               {\r
-                       this.handle = handle;\r
-               }\r
-\r
-               [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]\r
-               public void SetHandleAsInvalid()\r
-               {\r
-                       _disposed = true;\r
-               }\r
-\r
-               public bool IsClosed {\r
-                       [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]\r
-                       get { return _disposed; }\r
-               }\r
-\r
-               public abstract bool IsInvalid {\r
-                       [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]\r
-                       get;\r
-               }\r
-       }\r
-}\r
-#endif
\ No newline at end of file
+//
+// System.Runtime.InteropServices.CriticalHandle
+//
+// Author:
+//   Kazuki Oikawa  (kazuki@panicode.com)
+//
+
+
+using System;
+using System.Runtime.ConstrainedExecution;
+using System.Runtime.Serialization;
+
+namespace System.Runtime.InteropServices
+{
+       public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
+       {
+               protected IntPtr handle;
+               bool _disposed = false;
+
+               [ReliabilityContract (Consistency.WillNotCorruptState, Cer.MayFail)]
+               protected CriticalHandle (IntPtr invalidHandleValue)
+               {
+                       handle = invalidHandleValue;
+               }
+
+               [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+               ~CriticalHandle ()
+               {
+                       Dispose (false);
+               }
+
+               [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+               public void Close ()
+               {
+                       Dispose (true);
+               }
+
+               [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+               public void Dispose ()
+               {
+                       Dispose (true);
+               }
+
+               [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (_disposed)
+                               return;
+
+                       if (!IsInvalid){
+                               if (!_disposed && !ReleaseHandle ()) {
+                                       GC.SuppressFinalize (this);
+                               } else {
+                                       // Failed in release...
+                               }
+                       }
+                       _disposed = true;
+               }
+
+               [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+               protected abstract bool ReleaseHandle ();
+
+               [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+               protected void SetHandle (IntPtr handle)
+               {
+                       this.handle = handle;
+               }
+
+               [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+               public void SetHandleAsInvalid()
+               {
+                       _disposed = true;
+               }
+
+               public bool IsClosed {
+                       [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+                       get { return _disposed; }
+               }
+
+               public abstract bool IsInvalid {
+                       [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
+                       get;
+               }
+       }
+}