final class io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator extends java.lang.Object implements java.util.concurrent.Flow$Subscriber, java.util.Iterator, io.smallrye.mutiny.subscription.ContextSupport
{
private final java.util.Queue queue;
private final int batchSize;
private final int limit;
private final java.util.concurrent.locks.Lock lock;
private final java.util.concurrent.locks.Condition condition;
private final io.smallrye.mutiny.Context context;
long produced;
java.util.concurrent.atomic.AtomicReference subscription;
java.util.concurrent.atomic.AtomicBoolean done;
java.lang.Throwable failure;
void <init>(java.util.Queue, int, io.smallrye.mutiny.Context)
{
java.util.concurrent.locks.ReentrantLock v;
java.util.concurrent.atomic.AtomicBoolean v;
io.smallrye.mutiny.Context v;
java.util.concurrent.atomic.AtomicReference v;
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
java.util.concurrent.locks.Condition v;
java.util.concurrent.locks.Lock v;
int v;
java.util.Queue v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v := @parameter: java.util.Queue;
v := @parameter: int;
v := @parameter: io.smallrye.mutiny.Context;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.concurrent.atomic.AtomicReference;
specialinvoke v.<java.util.concurrent.atomic.AtomicReference: void <init>()>();
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicReference subscription> = v;
v = new java.util.concurrent.atomic.AtomicBoolean;
specialinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void <init>()>();
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicBoolean done> = v;
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.Queue queue> = v;
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: int batchSize> = v;
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: int limit> = v;
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: io.smallrye.mutiny.Context context> = v;
v = new java.util.concurrent.locks.ReentrantLock;
specialinvoke v.<java.util.concurrent.locks.ReentrantLock: void <init>()>();
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock> = v;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock>;
v = interfaceinvoke v.<java.util.concurrent.locks.Lock: java.util.concurrent.locks.Condition newCondition()>();
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Condition condition> = v;
return;
}
public boolean hasNext()
{
java.lang.Throwable v, v;
java.lang.IllegalStateException v;
java.util.concurrent.atomic.AtomicBoolean v, v;
java.lang.Thread v, v;
java.lang.String v, v;
boolean v, v, v, v, v;
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
java.util.concurrent.locks.Condition v;
java.util.concurrent.locks.Lock v, v, v, v;
java.lang.InterruptedException v;
java.util.Queue v, v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
label:
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicBoolean done>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean get()>();
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.Queue queue>;
v = interfaceinvoke v.<java.util.Queue: boolean isEmpty()>();
if v == 0 goto label;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.lang.Throwable failure>;
if v == null goto label;
staticinvoke <io.smallrye.mutiny.helpers.BlockingIterable: void propagateFailure(java.lang.Throwable)>(v);
goto label;
label:
if v == 0 goto label;
return 0;
label:
if v == 0 goto label;
v = staticinvoke <io.smallrye.mutiny.infrastructure.Infrastructure: boolean canCallerThreadBeBlocked()>();
if v != 0 goto label;
v = new java.lang.IllegalStateException;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = virtualinvoke v.<java.lang.Thread: java.lang.String getName()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("The current thread cannot be blocked: \u0001");
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>(v);
throw v;
label:
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock>;
interfaceinvoke v.<java.util.concurrent.locks.Lock: void lock()>();
label:
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicBoolean done>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean get()>();
if v != 0 goto label;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.Queue queue>;
v = interfaceinvoke v.<java.util.Queue: boolean isEmpty()>();
if v == 0 goto label;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Condition condition>;
interfaceinvoke v.<java.util.concurrent.locks.Condition: void await()>();
goto label;
label:
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock>;
interfaceinvoke v.<java.util.concurrent.locks.Lock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
virtualinvoke v.<java.lang.Thread: void interrupt()>();
specialinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: void terminateAndFire()>();
staticinvoke <io.smallrye.mutiny.helpers.BlockingIterable: void propagateFailure(java.lang.Throwable)>(v);
label:
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock>;
interfaceinvoke v.<java.util.concurrent.locks.Lock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock>;
interfaceinvoke v.<java.util.concurrent.locks.Lock: void unlock()>();
throw v;
label:
return 1;
catch java.lang.InterruptedException from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
public java.lang.Object next()
{
long v, v;
java.lang.IllegalArgumentException v;
java.util.concurrent.atomic.AtomicReference v;
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
byte v;
int v;
java.lang.Object v, v;
java.util.Queue v;
java.util.NoSuchElementException v;
boolean v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v = virtualinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: boolean hasNext()>();
if v == 0 goto label;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.Queue queue>;
v = interfaceinvoke v.<java.util.Queue: java.lang.Object poll()>();
if v != null goto label;
specialinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: void terminate()>();
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("`null` is not an accepted value");
staticinvoke <io.smallrye.mutiny.helpers.BlockingIterable: void propagateFailure(java.lang.Throwable)>(v);
label:
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: long produced>;
v = v + 1L;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: int limit>;
v = v cmp v;
if v != 0 goto label;
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: long produced> = 0L;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicReference subscription>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: java.lang.Object get()>();
interfaceinvoke v.<java.util.concurrent.Flow$Subscription: void request(long)>(v);
goto label;
label:
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: long produced> = v;
label:
return v;
label:
v = new java.util.NoSuchElementException;
specialinvoke v.<java.util.NoSuchElementException: void <init>()>();
throw v;
}
void fire()
{
java.lang.Throwable v;
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
java.util.concurrent.locks.Condition v;
java.util.concurrent.locks.Lock v, v, v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock>;
interfaceinvoke v.<java.util.concurrent.locks.Lock: void lock()>();
label:
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Condition condition>;
interfaceinvoke v.<java.util.concurrent.locks.Condition: void signalAll()>();
label:
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock>;
interfaceinvoke v.<java.util.concurrent.locks.Lock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.locks.Lock lock>;
interfaceinvoke v.<java.util.concurrent.locks.Lock: void unlock()>();
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
private void terminateAndFire()
{
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
specialinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: void terminate()>();
virtualinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: void fire()>();
return;
}
private void terminate()
{
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
io.smallrye.mutiny.subscription.UniSubscription v;
java.lang.Object v;
java.util.concurrent.atomic.AtomicReference v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicReference subscription>;
v = <io.smallrye.mutiny.helpers.EmptyUniSubscription: io.smallrye.mutiny.subscription.UniSubscription CANCELLED>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: java.lang.Object getAndSet(java.lang.Object)>(v);
if v == null goto label;
interfaceinvoke v.<java.util.concurrent.Flow$Subscription: void cancel()>();
label:
return;
}
public io.smallrye.mutiny.Context context()
{
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
io.smallrye.mutiny.Context v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: io.smallrye.mutiny.Context context>;
return v;
}
public void onSubscribe(java.util.concurrent.Flow$Subscription)
{
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
int v;
java.util.concurrent.atomic.AtomicReference v;
boolean v;
java.util.concurrent.Flow$Subscription v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v := @parameter: java.util.concurrent.Flow$Subscription;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicReference subscription>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: boolean compareAndSet(java.lang.Object,java.lang.Object)>(null, v);
if v == 0 goto label;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: int batchSize>;
interfaceinvoke v.<java.util.concurrent.Flow$Subscription: void request(long)>(v);
label:
return;
}
public void onNext(java.lang.Object)
{
io.smallrye.mutiny.subscription.UniSubscription v;
java.util.concurrent.atomic.AtomicReference v;
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
io.smallrye.mutiny.subscription.BackPressureFailure v;
java.lang.Object v, v;
java.util.Queue v;
boolean v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v := @parameter: java.lang.Object;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.Queue queue>;
v = interfaceinvoke v.<java.util.Queue: boolean offer(java.lang.Object)>(v);
if v != 0 goto label;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicReference subscription>;
v = <io.smallrye.mutiny.helpers.EmptyUniSubscription: io.smallrye.mutiny.subscription.UniSubscription CANCELLED>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: java.lang.Object getAndSet(java.lang.Object)>(v);
interfaceinvoke v.<java.util.concurrent.Flow$Subscription: void cancel()>();
v = new io.smallrye.mutiny.subscription.BackPressureFailure;
specialinvoke v.<io.smallrye.mutiny.subscription.BackPressureFailure: void <init>(java.lang.String)>("Buffer is full, cannot deliver the item");
virtualinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: void onError(java.lang.Throwable)>(v);
goto label;
label:
virtualinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: void fire()>();
label:
return;
}
public void onError(java.lang.Throwable)
{
java.lang.Throwable v;
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
java.util.concurrent.atomic.AtomicBoolean v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v := @parameter: java.lang.Throwable;
v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.lang.Throwable failure> = v;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicBoolean done>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void set(boolean)>(1);
virtualinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: void fire()>();
return;
}
public void onComplete()
{
io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator v;
java.util.concurrent.atomic.AtomicBoolean v;
v := @this: io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator;
v = v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: java.util.concurrent.atomic.AtomicBoolean done>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void set(boolean)>(1);
virtualinvoke v.<io.smallrye.mutiny.helpers.BlockingIterable$SubscriberIterator: void fire()>();
return;
}
}