-//\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;
+ }
+ }
+}