2 // System.Runtime.InteropServices.CriticalHandle
5 // Kazuki Oikawa (kazuki@panicode.com)
10 using System.Runtime.ConstrainedExecution;
11 using System.Runtime.Serialization;
13 namespace System.Runtime.InteropServices
15 public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
17 protected IntPtr handle;
18 bool _disposed = false;
20 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.MayFail)]
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 ()
44 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
45 protected virtual void Dispose (bool disposing)
54 if (disposing == true && !IsInvalid){
55 if (!ReleaseHandle ()) {
56 GC.SuppressFinalize (this);
58 // Failed in release...
63 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
64 protected abstract bool ReleaseHandle ();
66 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
67 protected void SetHandle (IntPtr handle)
72 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
73 public void SetHandleAsInvalid()
78 public bool IsClosed {
79 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
80 get { return _disposed; }
83 public abstract bool IsInvalid {
84 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]