2 // System.Runtime.InteropServices.CriticalHandle
\r
5 // Kazuki Oikawa (kazuki@panicode.com)
\r
11 using System.Runtime.ConstrainedExecution;
\r
12 using System.Runtime.Serialization;
\r
14 namespace System.Runtime.InteropServices
\r
16 public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
\r
18 protected IntPtr handle;
\r
19 bool _disposed = false;
\r
21 protected CriticalHandle (IntPtr invalidHandleValue)
\r
23 handle = invalidHandleValue;
\r
31 [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]
\r
32 public void Close ()
\r
37 [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]
\r
38 public void Dispose ()
\r
47 if (ReleaseHandle ()) {
\r
48 GC.SuppressFinalize (this);
\r
50 // Failed in release...
\r
54 [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]
\r
55 protected abstract bool ReleaseHandle ();
\r
57 [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]
\r
58 protected void SetHandle (IntPtr handle)
\r
60 this.handle = handle;
\r
63 [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]
\r
64 public void SetHandleAsInvalid()
\r
69 public bool IsClosed {
\r
70 [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]
\r
71 get { return _disposed; }
\r
74 public abstract bool IsInvalid {
\r
75 [ReliabilityContract (Consistency.WillNotCorruptState, CER.Success)]
\r