public void DangerousRelease ()
{
if (refcount <= 0)
throw new ObjectDisposedException (GetType ().FullName);
int newcount, current;
do {
current = refcount;
newcount = current-1;
} while (Interlocked.CompareExchange (ref refcount, newcount, current) != current);
if (newcount == 0 && owns_handle && !IsInvalid){
ReleaseHandle ();
handle = invalid_handle_value;
}
}