예제 #1
0
            void Timeout(long idx)
            {
                if (Volatile.Read(ref index) == idx && Interlocked.CompareExchange(ref index, long.MaxValue, idx) == idx)
                {
                    SubscriptionHelper.Cancel(ref upstream);
                    Interlocked.Exchange(ref timer, DisposableHelper.Disposed);

                    var p = fallback;

                    if (p == null)
                    {
                        actual.OnError(new TimeoutException());
                    }
                    else
                    {
                        long q = produced;
                        if (q != 0L)
                        {
                            ArbiterProduced(q);
                        }

                        p.Subscribe(new FallbackSubscriber(this));
                    }
                    worker.Dispose();
                }
            }
예제 #2
0
 void OtherComplete()
 {
     if (Volatile.Read(ref latest) == null)
     {
         SubscriptionHelper.Cancel(ref upstream);
         SerializationHelper.OnComplete(actual, ref wip, ref error);
     }
 }
 public void Cancel()
 {
     Volatile.Write(ref cancelled, true);
     SubscriptionHelper.Cancel(ref upstream);
     boundary.Cancel();
     lock (this)
     {
         buffer = default(C);
     }
 }
예제 #4
0
 public void OnError(Exception cause)
 {
     if (done)
     {
         return;
     }
     done = true;
     SubscriptionHelper.Cancel(ref otherSubscriber.upstream);
     latest = null;
     SerializationHelper.OnError(actual, ref wip, ref error, cause);
 }
예제 #5
0
 public void OnComplete()
 {
     if (done)
     {
         return;
     }
     done = true;
     SubscriptionHelper.Cancel(ref otherSubscriber.upstream);
     latest = null;
     SerializationHelper.OnComplete(actual, ref wip, ref error);
 }
 void BoundaryError(Exception cause)
 {
     SubscriptionHelper.Cancel(ref upstream);
     lock (this)
     {
         buffer = default(C);
         error  = cause;
     }
     Volatile.Write(ref done, true);
     Drain();
 }
            public void Cancel()
            {
                SubscriptionHelper.Cancel(ref upstream);
                foreach (var inner in others)
                {
                    SubscriptionHelper.Cancel(ref inner.upstream);
                }
                var ls = latest;

                for (int i = 0; i < ls.Length; i++)
                {
                    ls[i] = null;
                }
            }
            void OtherError(Exception ex, int index)
            {
                SubscriptionHelper.Cancel(ref upstream);
                var os = others;
                var n  = os.Length;

                for (int i = 0; i < n; i++)
                {
                    if (i != index)
                    {
                        SubscriptionHelper.Cancel(ref os[i].upstream);
                    }
                }
                SerializationHelper.OnError(actual, ref wip, ref error, ex);
            }
 void BoundaryComplete()
 {
     SubscriptionHelper.Cancel(ref upstream);
     lock (this)
     {
         var b = buffer;
         if (b == null)
         {
             return;
         }
         buffer = default(C);
         queue.Offer(b);
     }
     Volatile.Write(ref done, true);
     Drain();
 }
 public void OnComplete()
 {
     if (done)
     {
         return;
     }
     done = true;
     foreach (var inner in others)
     {
         SubscriptionHelper.Cancel(ref inner.upstream);
     }
     for (int i = 0; i < latest.Length; i++)
     {
         latest[i] = null;
     }
     SerializationHelper.OnComplete(actual, ref wip, ref error);
 }
 void OtherComplete(int index)
 {
     if (Volatile.Read(ref latest[index]) == null)
     {
         SubscriptionHelper.Cancel(ref upstream);
         var os = others;
         var n  = os.Length;
         for (int i = 0; i < n; i++)
         {
             if (i != index)
             {
                 SubscriptionHelper.Cancel(ref os[i].upstream);
             }
         }
         SerializationHelper.OnComplete(actual, ref wip, ref error);
     }
 }
예제 #12
0
            void BoundaryComplete()
            {
                SubscriptionHelper.Cancel(ref upstream);
                UnicastProcessor <T> b;

                lock (this)
                {
                    b = buffer;
                    if (b == null)
                    {
                        return;
                    }
                    buffer = null;
                }
                b.OnComplete();
                Volatile.Write(ref done, true);
                Drain();
            }
예제 #13
0
            void OtherComplete()
            {
                var curr = Interlocked.Exchange(ref latest, Terminated);

                SubscriptionHelper.Cancel(ref upstream);

                if (curr != Terminated)
                {
                    if (curr != null && emitLast)
                    {
                        other.CompleteLast(curr.item);
                    }
                    else
                    {
                        actual.OnComplete();
                    }
                }
            }
예제 #14
0
            void BoundaryError(Exception cause)
            {
                SubscriptionHelper.Cancel(ref upstream);
                UnicastProcessor <T> b;

                lock (this)
                {
                    b = buffer;
                    if (b == null)
                    {
                        return;
                    }
                    buffer = null;
                    error  = cause;
                }
                b.OnError(cause);
                Volatile.Write(ref done, true);
                Drain();
            }
예제 #15
0
 public void Cancel()
 {
     SubscriptionHelper.Cancel(ref upstream);
 }
예제 #16
0
 internal void CancelOther()
 {
     Volatile.Write(ref cancelled, true);
     SubscriptionHelper.Cancel(ref upstream);
 }
예제 #17
0
 void OtherError(Exception ex)
 {
     Interlocked.Exchange(ref latest, Terminated);
     SubscriptionHelper.Cancel(ref upstream);
     actual.OnError(ex);
 }
 void OtherSignal()
 {
     SubscriptionHelper.Cancel(ref upstream);
     SerializationHelper.OnComplete(actual, ref wip, ref error);
 }
예제 #19
0
 void OtherError(Exception ex)
 {
     SubscriptionHelper.Cancel(ref upstream);
     SerializationHelper.OnError(actual, ref wip, ref error, ex);
 }
예제 #20
0
 public void Cancel()
 {
     SubscriptionHelper.Cancel(ref upstream);
     SubscriptionHelper.Cancel(ref otherSubscriber.upstream);
 }
 public void OnError(Exception cause)
 {
     SubscriptionHelper.Cancel(ref other.upstream);
     SerializationHelper.OnError(actual, ref wip, ref error, cause);
 }
예제 #22
0
 public void Cancel()
 {
     SubscriptionHelper.Cancel(ref upstream);
     worker.Dispose();
 }
 internal void Cancel()
 {
     SubscriptionHelper.Cancel(ref upstream);
 }
 public void OnComplete()
 {
     SubscriptionHelper.Cancel(ref other.upstream);
     SerializationHelper.OnComplete(actual, ref wip, ref error);
 }