public static void SetFinalizerWorker(ref WeakRefTracker tracker, WeakRefTracker newVal) { if (Interlocked.CompareExchange(ref tracker, newVal, null) != null) { GC.SuppressFinalize(newVal); } }
bool IWeakReferenceable.SetWeakRef(WeakRefTracker value) { return Interlocked.CompareExchange<WeakRefTracker>(ref _weakrefTracker, value, null) == null; }
void IWeakReferenceable.SetFinalizer(WeakRefTracker value) { _weakrefTracker = value; }
bool IWeakReferenceable.SetWeakRef(WeakRefTracker value) { _tracker = value; return(true); }
void IWeakReferenceable.SetFinalizer(WeakRefTracker value) { ((IWeakReferenceable)this).SetWeakRef(value); }
bool IWeakReferenceable.SetWeakRef(WeakRefTracker obj0) { return(UserTypeOps.SetWeakRefHelper((IPythonObject)this, obj0)); }
void IWeakReferenceable.SetFinalizer(WeakRefTracker obj0) { UserTypeOps.SetFinalizerHelper((IPythonObject)this, obj0); }
void IWeakReferenceable.SetFinalizer(WeakRefTracker value) { _tracker = value; }
bool IWeakReferenceable.SetWeakRef(WeakRefTracker value) { _tracker = value; return true; }
bool IWeakReferenceable.SetWeakRef(WeakRefTracker value) { dict[SymbolTable.WeakRef] = value; return true; }
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 InstanceFinalizer) { wrt.RemoveHandlerAt(i); break; } } // we removed the last handler if (wrt.HandlerCount == 0) { GC.SuppressFinalize(wrt); weakRef = null; } } }
private void AddFinalizer() { InstanceFinalizer oif = new InstanceFinalizer(this); weakRef = new WeakRefTracker(oif, oif); }
bool IWeakReferenceable.SetWeakRef(WeakRefTracker value) { return(Interlocked.CompareExchange(ref _tracker, value, null) == null); }