Exemplo n.º 1
0
 public static void SetFinalizerWorker(ref WeakRefTracker tracker, WeakRefTracker newVal) {
     if (Interlocked.CompareExchange(ref tracker, newVal, null) != null) {
         GC.SuppressFinalize(newVal);
     }
 }
Exemplo n.º 2
0
 bool IWeakReferenceable.SetWeakRef(WeakRefTracker value) {
     return Interlocked.CompareExchange<WeakRefTracker>(ref _weakrefTracker, value, null) == null;
 }
Exemplo n.º 3
0
 void IWeakReferenceable.SetFinalizer(WeakRefTracker value) {
     _weakrefTracker = value;
 }
Exemplo n.º 4
0
 bool IWeakReferenceable.SetWeakRef(WeakRefTracker value)
 {
     _tracker = value;
     return(true);
 }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 8
0
 void IWeakReferenceable.SetFinalizer(WeakRefTracker value)
 {
     _tracker = value;
 }
Exemplo n.º 9
0
 bool IWeakReferenceable.SetWeakRef(WeakRefTracker value) {
     _tracker = value;
     return true;
 }
Exemplo n.º 10
0
 bool IWeakReferenceable.SetWeakRef(WeakRefTracker value)
 {
     dict[SymbolTable.WeakRef] = value;
     return true;
 }
Exemplo n.º 11
0
 void IWeakReferenceable.SetFinalizer(WeakRefTracker value)
 {
     ((IWeakReferenceable)this).SetWeakRef(value);
 }
Exemplo n.º 12
0
        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;
                }
            }
        }
Exemplo n.º 13
0
 private void AddFinalizer()
 {
     InstanceFinalizer oif = new InstanceFinalizer(this);
     weakRef = new WeakRefTracker(oif, oif);
 }
Exemplo n.º 14
0
 bool IWeakReferenceable.SetWeakRef(WeakRefTracker value)
 {
     return(Interlocked.CompareExchange(ref _tracker, value, null) == null);
 }