private void ClearFinalizer() { if (weakRef == null) { return; } WeakRefTracker wrt = weakRef; if (wrt != null) { // find our handler and remove it (other users could have created weak refs to us) for (int i = 0; i < wrt.HandlerCount; i++) { if (wrt.GetHandlerCallback(i) is OldInstanceFinalizer) { wrt.RemoveHandlerAt(i); break; } } // we removed the last handler if (wrt.HandlerCount == 0) { GC.SuppressFinalize(wrt); weakRef = null; } } }
private bool HasFinalizer() { if (weakRef != null) { WeakRefTracker wrt = weakRef; if (wrt != null) { for (int i = 0; i < wrt.HandlerCount; i++) { if (wrt.GetHandlerCallback(i) is OldInstanceFinalizer) { return(true); } } } } return(false); }