2 // System.Runtime.InteropServices.CriticalHandle
5 // Kazuki Oikawa (kazuki@panicode.com)
11 using System.Runtime.ConstrainedExecution;
12 using System.Runtime.Serialization;
14 namespace System.Runtime.InteropServices
16 public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
18 protected IntPtr handle;
19 bool _disposed = false;
21 protected CriticalHandle (IntPtr invalidHandleValue)
23 handle = invalidHandleValue;
26 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
32 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
38 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
39 public void Dispose ()
48 if (ReleaseHandle ()) {
49 GC.SuppressFinalize (this);
51 // Failed in release...
55 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
56 protected abstract bool ReleaseHandle ();
58 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
59 protected void SetHandle (IntPtr handle)
64 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
65 public void SetHandleAsInvalid()
70 public bool IsClosed {
71 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
72 get { return _disposed; }
75 public abstract bool IsInvalid {
76 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]