public void Free()
{
IntPtr num = this.m_handle;
if (!(num != IntPtr.Zero) || !(Interlocked.CompareExchange(ref this.m_handle, IntPtr.Zero, num) == num))
{
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_HandleIsNotInitialized"));
}
if (GCHandle.s_probeIsActive)
{
GCHandle.s_cookieTable.RemoveHandleIfPresent(num);
}
GCHandle.InternalFree((IntPtr)((int)num & -2));
}