2021-06-27 20:44:35 +00:00
package androidx.concurrent.futures ;
import androidx.annotation.NonNull ;
import androidx.annotation.Nullable ;
import androidx.annotation.RestrictTo ;
2021-12-21 23:37:30 +00:00
import b.i.b.d.a.a ;
2021-06-27 20:44:35 +00:00
import java.util.Locale ;
import java.util.Objects ;
import java.util.concurrent.CancellationException ;
import java.util.concurrent.ExecutionException ;
import java.util.concurrent.Executor ;
import java.util.concurrent.Future ;
import java.util.concurrent.ScheduledFuture ;
import java.util.concurrent.TimeUnit ;
import java.util.concurrent.TimeoutException ;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater ;
import java.util.concurrent.locks.LockSupport ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
@RestrictTo ( { RestrictTo . Scope . LIBRARY_GROUP_PREFIX } )
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public abstract class AbstractResolvableFuture < V > implements a < V > {
public static final AtomicHelper ATOMIC_HELPER ;
2022-03-02 20:59:20 +00:00
private static final Object NULL ;
2021-06-27 20:44:35 +00:00
private static final long SPIN_THRESHOLD_NANOS = 1000 ;
@Nullable
public volatile Listener listeners ;
@Nullable
public volatile Object value ;
@Nullable
public volatile Waiter waiters ;
2022-03-02 20:59:20 +00:00
public static final boolean GENERATE_CANCELLATION_CAUSES = Boolean . parseBoolean ( System . getProperty ( " guava.concurrent.generate_cancellation_cause " , " false " ) ) ;
private static final Logger log = Logger . getLogger ( AbstractResolvableFuture . class . getName ( ) ) ;
2021-06-27 20:44:35 +00:00
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static abstract class AtomicHelper {
private AtomicHelper ( ) {
}
public abstract boolean casListeners ( AbstractResolvableFuture < ? > abstractResolvableFuture , Listener listener , Listener listener2 ) ;
public abstract boolean casValue ( AbstractResolvableFuture < ? > abstractResolvableFuture , Object obj , Object obj2 ) ;
public abstract boolean casWaiters ( AbstractResolvableFuture < ? > abstractResolvableFuture , Waiter waiter , Waiter waiter2 ) ;
public abstract void putNext ( Waiter waiter , Waiter waiter2 ) ;
public abstract void putThread ( Waiter waiter , Thread thread ) ;
}
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static final class Cancellation {
public static final Cancellation CAUSELESS_CANCELLED ;
public static final Cancellation CAUSELESS_INTERRUPTED ;
@Nullable
public final Throwable cause ;
public final boolean wasInterrupted ;
static {
if ( AbstractResolvableFuture . GENERATE_CANCELLATION_CAUSES ) {
CAUSELESS_CANCELLED = null ;
CAUSELESS_INTERRUPTED = null ;
return ;
}
CAUSELESS_CANCELLED = new Cancellation ( false , null ) ;
CAUSELESS_INTERRUPTED = new Cancellation ( true , null ) ;
}
public Cancellation ( boolean z2 , @Nullable Throwable th ) {
this . wasInterrupted = z2 ;
this . cause = th ;
}
}
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static final class Failure {
public static final Failure FALLBACK_INSTANCE = new Failure ( new AnonymousClass1 ( " Failure occurred while trying to finish a future. " ) ) ;
public final Throwable exception ;
/* renamed from: androidx.concurrent.futures.AbstractResolvableFuture$Failure$1 reason: invalid class name */
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static class AnonymousClass1 extends Throwable {
public AnonymousClass1 ( String str ) {
super ( str ) ;
}
@Override // java.lang.Throwable
public synchronized Throwable fillInStackTrace ( ) {
return this ;
}
}
public Failure ( Throwable th ) {
this . exception = ( Throwable ) AbstractResolvableFuture . checkNotNull ( th ) ;
}
}
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static final class Listener {
public static final Listener TOMBSTONE = new Listener ( null , null ) ;
public final Executor executor ;
@Nullable
public Listener next ;
public final Runnable task ;
public Listener ( Runnable runnable , Executor executor ) {
this . task = runnable ;
this . executor = executor ;
}
}
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static final class SafeAtomicHelper extends AtomicHelper {
public final AtomicReferenceFieldUpdater < AbstractResolvableFuture , Listener > listenersUpdater ;
public final AtomicReferenceFieldUpdater < AbstractResolvableFuture , Object > valueUpdater ;
public final AtomicReferenceFieldUpdater < Waiter , Waiter > waiterNextUpdater ;
public final AtomicReferenceFieldUpdater < Waiter , Thread > waiterThreadUpdater ;
public final AtomicReferenceFieldUpdater < AbstractResolvableFuture , Waiter > waitersUpdater ;
public SafeAtomicHelper ( AtomicReferenceFieldUpdater < Waiter , Thread > atomicReferenceFieldUpdater , AtomicReferenceFieldUpdater < Waiter , Waiter > atomicReferenceFieldUpdater2 , AtomicReferenceFieldUpdater < AbstractResolvableFuture , Waiter > atomicReferenceFieldUpdater3 , AtomicReferenceFieldUpdater < AbstractResolvableFuture , Listener > atomicReferenceFieldUpdater4 , AtomicReferenceFieldUpdater < AbstractResolvableFuture , Object > atomicReferenceFieldUpdater5 ) {
super ( ) ;
this . waiterThreadUpdater = atomicReferenceFieldUpdater ;
this . waiterNextUpdater = atomicReferenceFieldUpdater2 ;
this . waitersUpdater = atomicReferenceFieldUpdater3 ;
this . listenersUpdater = atomicReferenceFieldUpdater4 ;
this . valueUpdater = atomicReferenceFieldUpdater5 ;
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public boolean casListeners ( AbstractResolvableFuture < ? > abstractResolvableFuture , Listener listener , Listener listener2 ) {
return this . listenersUpdater . compareAndSet ( abstractResolvableFuture , listener , listener2 ) ;
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public boolean casValue ( AbstractResolvableFuture < ? > abstractResolvableFuture , Object obj , Object obj2 ) {
return this . valueUpdater . compareAndSet ( abstractResolvableFuture , obj , obj2 ) ;
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public boolean casWaiters ( AbstractResolvableFuture < ? > abstractResolvableFuture , Waiter waiter , Waiter waiter2 ) {
return this . waitersUpdater . compareAndSet ( abstractResolvableFuture , waiter , waiter2 ) ;
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public void putNext ( Waiter waiter , Waiter waiter2 ) {
this . waiterNextUpdater . lazySet ( waiter , waiter2 ) ;
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public void putThread ( Waiter waiter , Thread thread ) {
this . waiterThreadUpdater . lazySet ( waiter , thread ) ;
}
}
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static final class SetFuture < V > implements Runnable {
public final a < ? extends V > future ;
public final AbstractResolvableFuture < V > owner ;
public SetFuture ( AbstractResolvableFuture < V > abstractResolvableFuture , a < ? extends V > aVar ) {
this . owner = abstractResolvableFuture ;
this . future = aVar ;
}
@Override // java.lang.Runnable
public void run ( ) {
if ( this . owner . value = = this ) {
if ( AbstractResolvableFuture . ATOMIC_HELPER . casValue ( this . owner , this , AbstractResolvableFuture . getFutureValue ( this . future ) ) ) {
AbstractResolvableFuture . complete ( this . owner ) ;
}
}
}
}
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static final class SynchronizedHelper extends AtomicHelper {
public SynchronizedHelper ( ) {
super ( ) ;
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public boolean casListeners ( AbstractResolvableFuture < ? > abstractResolvableFuture , Listener listener , Listener listener2 ) {
synchronized ( abstractResolvableFuture ) {
if ( abstractResolvableFuture . listeners ! = listener ) {
return false ;
}
abstractResolvableFuture . listeners = listener2 ;
return true ;
}
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public boolean casValue ( AbstractResolvableFuture < ? > abstractResolvableFuture , Object obj , Object obj2 ) {
synchronized ( abstractResolvableFuture ) {
if ( abstractResolvableFuture . value ! = obj ) {
return false ;
}
abstractResolvableFuture . value = obj2 ;
return true ;
}
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public boolean casWaiters ( AbstractResolvableFuture < ? > abstractResolvableFuture , Waiter waiter , Waiter waiter2 ) {
synchronized ( abstractResolvableFuture ) {
if ( abstractResolvableFuture . waiters ! = waiter ) {
return false ;
}
abstractResolvableFuture . waiters = waiter2 ;
return true ;
}
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public void putNext ( Waiter waiter , Waiter waiter2 ) {
waiter . next = waiter2 ;
}
@Override // androidx.concurrent.futures.AbstractResolvableFuture.AtomicHelper
public void putThread ( Waiter waiter , Thread thread ) {
waiter . thread = thread ;
}
}
2022-03-02 20:59:20 +00:00
/* loaded from: classes.dex */
2021-06-27 20:44:35 +00:00
public static final class Waiter {
public static final Waiter TOMBSTONE = new Waiter ( false ) ;
@Nullable
public volatile Waiter next ;
@Nullable
public volatile Thread thread ;
public Waiter ( ) {
AbstractResolvableFuture . ATOMIC_HELPER . putThread ( this , Thread . currentThread ( ) ) ;
}
public Waiter ( boolean z2 ) {
}
public void setNext ( Waiter waiter ) {
AbstractResolvableFuture . ATOMIC_HELPER . putNext ( this , waiter ) ;
}
public void unpark ( ) {
Thread thread = this . thread ;
if ( thread ! = null ) {
this . thread = null ;
LockSupport . unpark ( thread ) ;
}
}
}
static {
AtomicHelper atomicHelper ;
Throwable th ;
try {
atomicHelper = new SafeAtomicHelper ( AtomicReferenceFieldUpdater . newUpdater ( Waiter . class , Thread . class , " thread " ) , AtomicReferenceFieldUpdater . newUpdater ( Waiter . class , Waiter . class , " next " ) , AtomicReferenceFieldUpdater . newUpdater ( AbstractResolvableFuture . class , Waiter . class , " waiters " ) , AtomicReferenceFieldUpdater . newUpdater ( AbstractResolvableFuture . class , Listener . class , " listeners " ) , AtomicReferenceFieldUpdater . newUpdater ( AbstractResolvableFuture . class , Object . class , " value " ) ) ;
th = null ;
} catch ( Throwable th2 ) {
th = th2 ;
atomicHelper = new SynchronizedHelper ( ) ;
}
ATOMIC_HELPER = atomicHelper ;
if ( th ! = null ) {
log . log ( Level . SEVERE , " SafeAtomicHelper is broken! " , th ) ;
}
2022-03-02 20:59:20 +00:00
NULL = new Object ( ) ;
2021-06-27 20:44:35 +00:00
}
private void addDoneString ( StringBuilder sb ) {
try {
Object uninterruptibly = getUninterruptibly ( this ) ;
sb . append ( " SUCCESS, result=[ " ) ;
sb . append ( userObjectToString ( uninterruptibly ) ) ;
sb . append ( " ] " ) ;
} catch ( CancellationException unused ) {
sb . append ( " CANCELLED " ) ;
2022-03-02 20:59:20 +00:00
} catch ( RuntimeException e ) {
2021-06-27 20:44:35 +00:00
sb . append ( " UNKNOWN, cause=[ " ) ;
2022-03-02 20:59:20 +00:00
sb . append ( e . getClass ( ) ) ;
2021-06-27 20:44:35 +00:00
sb . append ( " thrown from get()] " ) ;
2022-03-02 20:59:20 +00:00
} catch ( ExecutionException e2 ) {
sb . append ( " FAILURE, cause=[ " ) ;
sb . append ( e2 . getCause ( ) ) ;
sb . append ( " ] " ) ;
2021-06-27 20:44:35 +00:00
}
}
private static CancellationException cancellationExceptionWithCause ( @Nullable String str , @Nullable Throwable th ) {
CancellationException cancellationException = new CancellationException ( str ) ;
cancellationException . initCause ( th ) ;
return cancellationException ;
}
@NonNull
public static < T > T checkNotNull ( @Nullable T t ) {
Objects . requireNonNull ( t ) ;
return t ;
}
private Listener clearListeners ( Listener listener ) {
Listener listener2 ;
do {
listener2 = this . listeners ;
} while ( ! ATOMIC_HELPER . casListeners ( this , listener2 , Listener . TOMBSTONE ) ) ;
Listener listener3 = listener ;
Listener listener4 = listener2 ;
while ( listener4 ! = null ) {
2022-03-02 20:59:20 +00:00
listener4 = listener4 . next ;
2021-06-27 20:44:35 +00:00
listener4 . next = listener3 ;
listener3 = listener4 ;
}
return listener3 ;
}
/* JADX WARN: Multi-variable type inference failed */
public static void complete ( AbstractResolvableFuture < ? > abstractResolvableFuture ) {
Listener listener = null ;
while ( true ) {
abstractResolvableFuture . releaseWaiters ( ) ;
abstractResolvableFuture . afterDone ( ) ;
Listener clearListeners = abstractResolvableFuture . clearListeners ( listener ) ;
2022-03-02 20:59:20 +00:00
while ( clearListeners ! = null ) {
listener = clearListeners . next ;
Runnable runnable = clearListeners . task ;
if ( runnable instanceof SetFuture ) {
SetFuture setFuture = ( SetFuture ) runnable ;
abstractResolvableFuture = setFuture . owner ;
if ( abstractResolvableFuture . value = = setFuture ) {
if ( ATOMIC_HELPER . casValue ( abstractResolvableFuture , setFuture , getFutureValue ( setFuture . future ) ) ) {
break ;
2021-06-27 20:44:35 +00:00
}
} else {
2022-03-02 20:59:20 +00:00
continue ;
2021-06-27 20:44:35 +00:00
}
} else {
2022-03-02 20:59:20 +00:00
executeListener ( runnable , clearListeners . executor ) ;
2021-06-27 20:44:35 +00:00
}
2022-03-02 20:59:20 +00:00
clearListeners = listener ;
2021-06-27 20:44:35 +00:00
}
2022-03-02 20:59:20 +00:00
return ;
2021-06-27 20:44:35 +00:00
}
}
private static void executeListener ( Runnable runnable , Executor executor ) {
try {
executor . execute ( runnable ) ;
} catch ( RuntimeException e ) {
Logger logger = log ;
Level level = Level . SEVERE ;
logger . log ( level , " RuntimeException while executing runnable " + runnable + " with executor " + executor , ( Throwable ) e ) ;
}
}
/* JADX WARN: Multi-variable type inference failed */
private V getDoneValue ( Object obj ) throws ExecutionException {
if ( obj instanceof Cancellation ) {
throw cancellationExceptionWithCause ( " Task was cancelled. " , ( ( Cancellation ) obj ) . cause ) ;
} else if ( obj instanceof Failure ) {
throw new ExecutionException ( ( ( Failure ) obj ) . exception ) ;
} else if ( obj = = NULL ) {
return null ;
} else {
return obj ;
}
}
public static Object getFutureValue ( a < ? > aVar ) {
if ( aVar instanceof AbstractResolvableFuture ) {
Object obj = ( ( AbstractResolvableFuture ) aVar ) . value ;
if ( ! ( obj instanceof Cancellation ) ) {
return obj ;
}
Cancellation cancellation = ( Cancellation ) obj ;
return cancellation . wasInterrupted ? cancellation . cause ! = null ? new Cancellation ( false , cancellation . cause ) : Cancellation . CAUSELESS_CANCELLED : obj ;
}
boolean isCancelled = aVar . isCancelled ( ) ;
if ( ( ! GENERATE_CANCELLATION_CAUSES ) & & isCancelled ) {
return Cancellation . CAUSELESS_CANCELLED ;
}
try {
Object uninterruptibly = getUninterruptibly ( aVar ) ;
return uninterruptibly = = null ? NULL : uninterruptibly ;
2022-03-02 20:59:20 +00:00
} catch ( CancellationException e ) {
2021-06-27 20:44:35 +00:00
if ( isCancelled ) {
2022-03-02 20:59:20 +00:00
return new Cancellation ( false , e ) ;
2021-06-27 20:44:35 +00:00
}
2022-03-02 20:59:20 +00:00
return new Failure ( new IllegalArgumentException ( " get() threw CancellationException, despite reporting isCancelled() == false: " + aVar , e ) ) ;
} catch ( ExecutionException e2 ) {
return new Failure ( e2 . getCause ( ) ) ;
2021-06-27 20:44:35 +00:00
} catch ( Throwable th ) {
return new Failure ( th ) ;
}
}
private static < V > V getUninterruptibly ( Future < V > future ) throws ExecutionException {
V v ;
boolean z2 = false ;
while ( true ) {
try {
v = future . get ( ) ;
break ;
} catch ( InterruptedException unused ) {
z2 = true ;
} catch ( Throwable th ) {
if ( z2 ) {
Thread . currentThread ( ) . interrupt ( ) ;
}
throw th ;
}
}
if ( z2 ) {
Thread . currentThread ( ) . interrupt ( ) ;
}
return v ;
}
private void releaseWaiters ( ) {
Waiter waiter ;
do {
waiter = this . waiters ;
} while ( ! ATOMIC_HELPER . casWaiters ( this , waiter , Waiter . TOMBSTONE ) ) ;
while ( waiter ! = null ) {
waiter . unpark ( ) ;
waiter = waiter . next ;
}
}
private void removeWaiter ( Waiter waiter ) {
waiter . thread = null ;
while ( true ) {
Waiter waiter2 = this . waiters ;
if ( waiter2 ! = Waiter . TOMBSTONE ) {
Waiter waiter3 = null ;
while ( waiter2 ! = null ) {
Waiter waiter4 = waiter2 . next ;
if ( waiter2 . thread ! = null ) {
waiter3 = waiter2 ;
} else if ( waiter3 ! = null ) {
waiter3 . next = waiter4 ;
if ( waiter3 . thread = = null ) {
2022-03-02 20:59:20 +00:00
break ;
2021-06-27 20:44:35 +00:00
}
} else if ( ! ATOMIC_HELPER . casWaiters ( this , waiter2 , waiter4 ) ) {
2022-03-02 20:59:20 +00:00
break ;
2021-06-27 20:44:35 +00:00
}
waiter2 = waiter4 ;
}
return ;
}
return ;
}
}
private String userObjectToString ( Object obj ) {
return obj = = this ? " this future " : String . valueOf ( obj ) ;
}
2021-12-21 23:37:30 +00:00
@Override // b.i.b.d.a.a
2021-06-27 20:44:35 +00:00
public final void addListener ( Runnable runnable , Executor executor ) {
checkNotNull ( runnable ) ;
checkNotNull ( executor ) ;
Listener listener = this . listeners ;
if ( listener ! = Listener . TOMBSTONE ) {
Listener listener2 = new Listener ( runnable , executor ) ;
do {
listener2 . next = listener ;
if ( ! ATOMIC_HELPER . casListeners ( this , listener , listener2 ) ) {
listener = this . listeners ;
} else {
return ;
}
} while ( listener ! = Listener . TOMBSTONE ) ;
2022-03-02 20:59:20 +00:00
executeListener ( runnable , executor ) ;
2021-06-27 20:44:35 +00:00
}
executeListener ( runnable , executor ) ;
}
public void afterDone ( ) {
}
@Override // java.util.concurrent.Future
public final boolean cancel ( boolean z2 ) {
Object obj = this . value ;
if ( ! ( obj = = null ) & & ! ( obj instanceof SetFuture ) ) {
return false ;
}
Cancellation cancellation = GENERATE_CANCELLATION_CAUSES ? new Cancellation ( z2 , new CancellationException ( " Future.cancel() was called. " ) ) : z2 ? Cancellation . CAUSELESS_INTERRUPTED : Cancellation . CAUSELESS_CANCELLED ;
boolean z3 = false ;
AbstractResolvableFuture < V > abstractResolvableFuture = this ;
while ( true ) {
if ( ATOMIC_HELPER . casValue ( abstractResolvableFuture , obj , cancellation ) ) {
if ( z2 ) {
abstractResolvableFuture . interruptTask ( ) ;
}
complete ( abstractResolvableFuture ) ;
if ( ! ( obj instanceof SetFuture ) ) {
return true ;
}
a < ? extends V > aVar = ( ( SetFuture ) obj ) . future ;
if ( aVar instanceof AbstractResolvableFuture ) {
abstractResolvableFuture = ( AbstractResolvableFuture ) aVar ;
obj = abstractResolvableFuture . value ;
if ( ! ( obj = = null ) & & ! ( obj instanceof SetFuture ) ) {
return true ;
}
z3 = true ;
} else {
aVar . cancel ( z2 ) ;
return true ;
}
} else {
obj = abstractResolvableFuture . value ;
if ( ! ( obj instanceof SetFuture ) ) {
return z3 ;
}
}
}
}
2022-03-02 20:59:20 +00:00
/ * JADX WARN : Code restructure failed : missing block : B : 17 : 0x0030 , code lost :
java . util . concurrent . locks . LockSupport . park ( r6 ) ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 18 : 0x0037 , code lost :
if ( java . lang . Thread . interrupted ( ) ! = false ) goto L_0x004b ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 19 : 0x0039 , code lost :
r0 = r6 . value ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 20 : 0x003b , code lost :
if ( r0 = = null ) goto L_0x003f ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 21 : 0x003d , code lost :
r4 = true ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 22 : 0x003f , code lost :
r4 = false ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 24 : 0x0044 , code lost :
if ( ( r4 & ( ! ( r0 instanceof androidx . concurrent . futures . AbstractResolvableFuture . SetFuture ) ) ) = = false ) goto L_0x0030 ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 26 : 0x004a , code lost :
return getDoneValue ( r0 ) ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 27 : 0x004b , code lost :
removeWaiter ( r3 ) ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 28 : 0x0053 , code lost :
throw new java . lang . InterruptedException ( ) ;
* /
2021-06-27 20:44:35 +00:00
@Override // java.util.concurrent.Future
2022-03-02 20:59:20 +00:00
/ *
Code decompiled incorrectly , please refer to instructions dump .
* /
2021-06-27 20:44:35 +00:00
public final V get ( ) throws InterruptedException , ExecutionException {
if ( ! Thread . interrupted ( ) ) {
2022-03-02 20:59:20 +00:00
Object obj = this . value ;
if ( ( obj ! = null ) & & ( ! ( obj instanceof SetFuture ) ) ) {
return getDoneValue ( obj ) ;
2021-06-27 20:44:35 +00:00
}
Waiter waiter = this . waiters ;
2022-03-02 20:59:20 +00:00
if ( waiter = = Waiter . TOMBSTONE ) {
return getDoneValue ( this . value ) ;
2021-06-27 20:44:35 +00:00
}
2022-03-02 20:59:20 +00:00
Waiter waiter2 = new Waiter ( ) ;
do {
waiter2 . setNext ( waiter ) ;
if ( ATOMIC_HELPER . casWaiters ( this , waiter , waiter2 ) ) {
break ;
}
waiter = this . waiters ;
} while ( waiter ! = Waiter . TOMBSTONE ) ;
2021-06-27 20:44:35 +00:00
return getDoneValue ( this . value ) ;
}
throw new InterruptedException ( ) ;
}
2022-03-02 20:59:20 +00:00
/ * JADX WARN : Code restructure failed : missing block : B : 23 : 0x0046 , code lost :
java . util . concurrent . locks . LockSupport . parkNanos ( r12 , r0 ) ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 24 : 0x004d , code lost :
if ( java . lang . Thread . interrupted ( ) ! = false ) goto L_0x0070 ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 25 : 0x004f , code lost :
r0 = r12 . value ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 26 : 0x0051 , code lost :
if ( r0 = = null ) goto L_0x0055 ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 27 : 0x0053 , code lost :
r1 = true ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 28 : 0x0055 , code lost :
r1 = false ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 30 : 0x005b , code lost :
if ( ( r1 & ( ! ( r0 instanceof androidx . concurrent . futures . AbstractResolvableFuture . SetFuture ) ) ) = = false ) goto L_0x0062 ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 32 : 0x0061 , code lost :
return getDoneValue ( r0 ) ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 33 : 0x0062 , code lost :
r0 = r4 - java . lang . System . nanoTime ( ) ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 34 : 0x006a , code lost :
if ( r0 > = 1000 ) goto L_0x0046 ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 35 : 0x006c , code lost :
removeWaiter ( r9 ) ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 36 : 0x0070 , code lost :
removeWaiter ( r9 ) ;
* /
/ * JADX WARN : Code restructure failed : missing block : B : 37 : 0x0078 , code lost :
throw new java . lang . InterruptedException ( ) ;
* /
2021-06-27 20:44:35 +00:00
@Override // java.util.concurrent.Future
2022-03-02 20:59:20 +00:00
/ *
Code decompiled incorrectly , please refer to instructions dump .
* /
2021-06-27 20:44:35 +00:00
public final V get ( long j , TimeUnit timeUnit ) throws InterruptedException , TimeoutException , ExecutionException {
2022-03-02 20:59:20 +00:00
Locale locale ;
2021-06-27 20:44:35 +00:00
long nanos = timeUnit . toNanos ( j ) ;
if ( ! Thread . interrupted ( ) ) {
Object obj = this . value ;
if ( ( obj ! = null ) & & ( ! ( obj instanceof SetFuture ) ) ) {
return getDoneValue ( obj ) ;
}
2022-03-02 20:59:20 +00:00
long nanoTime = nanos > 0 ? System . nanoTime ( ) + nanos : 0L ;
2021-06-27 20:44:35 +00:00
if ( nanos > = 1000 ) {
Waiter waiter = this . waiters ;
2022-03-02 20:59:20 +00:00
if ( waiter = = Waiter . TOMBSTONE ) {
return getDoneValue ( this . value ) ;
2021-06-27 20:44:35 +00:00
}
2022-03-02 20:59:20 +00:00
Waiter waiter2 = new Waiter ( ) ;
do {
waiter2 . setNext ( waiter ) ;
if ( ATOMIC_HELPER . casWaiters ( this , waiter , waiter2 ) ) {
break ;
}
waiter = this . waiters ;
} while ( waiter ! = Waiter . TOMBSTONE ) ;
2021-06-27 20:44:35 +00:00
return getDoneValue ( this . value ) ;
}
while ( nanos > 0 ) {
2022-03-02 20:59:20 +00:00
Object obj2 = this . value ;
if ( ( obj2 ! = null ) & & ( ! ( obj2 instanceof SetFuture ) ) ) {
return getDoneValue ( obj2 ) ;
2021-06-27 20:44:35 +00:00
}
if ( ! Thread . interrupted ( ) ) {
nanos = nanoTime - System . nanoTime ( ) ;
} else {
throw new InterruptedException ( ) ;
}
}
String abstractResolvableFuture = toString ( ) ;
2022-03-02 20:59:20 +00:00
String lowerCase = timeUnit . toString ( ) . toLowerCase ( Locale . ROOT ) ;
2021-11-08 18:25:28 +00:00
String str = " Waited " + j + " " + timeUnit . toString ( ) . toLowerCase ( locale ) ;
2021-06-27 20:44:35 +00:00
if ( nanos + 1000 < 0 ) {
2021-12-21 23:37:30 +00:00
String v = b . d . b . a . a . v ( str , " (plus " ) ;
2021-06-27 20:44:35 +00:00
long j2 = - nanos ;
long convert = timeUnit . convert ( j2 , TimeUnit . NANOSECONDS ) ;
long nanos2 = j2 - timeUnit . toNanos ( convert ) ;
2022-03-02 20:59:20 +00:00
int i = ( convert > 0L ? 1 : ( convert = = 0L ? 0 : - 1 ) ) ;
2021-06-27 20:44:35 +00:00
boolean z2 = i = = 0 | | nanos2 > 1000 ;
if ( i > 0 ) {
2021-11-08 18:25:28 +00:00
String str2 = v + convert + " " + lowerCase ;
2021-06-27 20:44:35 +00:00
if ( z2 ) {
2021-12-21 23:37:30 +00:00
str2 = b . d . b . a . a . v ( str2 , " , " ) ;
2021-06-27 20:44:35 +00:00
}
2021-12-21 23:37:30 +00:00
v = b . d . b . a . a . v ( str2 , " " ) ;
2021-06-27 20:44:35 +00:00
}
if ( z2 ) {
2021-11-08 18:25:28 +00:00
v = v + nanos2 + " nanoseconds " ;
2021-06-27 20:44:35 +00:00
}
2021-12-21 23:37:30 +00:00
str = b . d . b . a . a . v ( v , " delay) " ) ;
2021-06-27 20:44:35 +00:00
}
if ( isDone ( ) ) {
2021-12-21 23:37:30 +00:00
throw new TimeoutException ( b . d . b . a . a . v ( str , " but future completed as timeout expired " ) ) ;
2021-06-27 20:44:35 +00:00
}
2021-12-21 23:37:30 +00:00
throw new TimeoutException ( b . d . b . a . a . w ( str , " for " , abstractResolvableFuture ) ) ;
2021-06-27 20:44:35 +00:00
}
throw new InterruptedException ( ) ;
}
public void interruptTask ( ) {
}
@Override // java.util.concurrent.Future
public final boolean isCancelled ( ) {
return this . value instanceof Cancellation ;
}
@Override // java.util.concurrent.Future
public final boolean isDone ( ) {
Object obj = this . value ;
return ( ! ( obj instanceof SetFuture ) ) & ( obj ! = null ) ;
}
public final void maybePropagateCancellationTo ( @Nullable Future < ? > future ) {
if ( ( future ! = null ) & & isCancelled ( ) ) {
future . cancel ( wasInterrupted ( ) ) ;
}
}
@Nullable
public String pendingToString ( ) {
Object obj = this . value ;
if ( obj instanceof SetFuture ) {
2022-03-22 15:40:06 +00:00
return b . d . b . a . a . H ( b . d . b . a . a . S ( " setFuture=[ " ) , userObjectToString ( ( ( SetFuture ) obj ) . future ) , " ] " ) ;
2021-06-27 20:44:35 +00:00
}
if ( ! ( this instanceof ScheduledFuture ) ) {
return null ;
}
2022-03-22 15:40:06 +00:00
StringBuilder S = b . d . b . a . a . S ( " remaining delay=[ " ) ;
S . append ( ( ( ScheduledFuture ) this ) . getDelay ( TimeUnit . MILLISECONDS ) ) ;
S . append ( " ms] " ) ;
return S . toString ( ) ;
2021-06-27 20:44:35 +00:00
}
public boolean set ( @Nullable V v ) {
if ( v = = null ) {
v = ( V ) NULL ;
}
if ( ! ATOMIC_HELPER . casValue ( this , null , v ) ) {
return false ;
}
complete ( this ) ;
return true ;
}
public boolean setException ( Throwable th ) {
if ( ! ATOMIC_HELPER . casValue ( this , null , new Failure ( ( Throwable ) checkNotNull ( th ) ) ) ) {
return false ;
}
complete ( this ) ;
return true ;
}
public boolean setFuture ( a < ? extends V > aVar ) {
Failure failure ;
checkNotNull ( aVar ) ;
Object obj = this . value ;
if ( obj = = null ) {
if ( aVar . isDone ( ) ) {
if ( ! ATOMIC_HELPER . casValue ( this , null , getFutureValue ( aVar ) ) ) {
return false ;
}
complete ( this ) ;
return true ;
}
2022-03-02 20:59:20 +00:00
SetFuture setFuture = new SetFuture ( this , aVar ) ;
2021-06-27 20:44:35 +00:00
if ( ATOMIC_HELPER . casValue ( this , null , setFuture ) ) {
try {
aVar . addListener ( setFuture , DirectExecutor . INSTANCE ) ;
2022-03-02 20:59:20 +00:00
} catch ( Throwable th ) {
try {
failure = new Failure ( th ) ;
} catch ( Throwable unused ) {
failure = Failure . FALLBACK_INSTANCE ;
}
ATOMIC_HELPER . casValue ( this , setFuture , failure ) ;
2021-06-27 20:44:35 +00:00
}
return true ;
}
obj = this . value ;
}
if ( obj instanceof Cancellation ) {
aVar . cancel ( ( ( Cancellation ) obj ) . wasInterrupted ) ;
}
return false ;
}
public String toString ( ) {
String str ;
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( super . toString ( ) ) ;
sb . append ( " [status= " ) ;
if ( isCancelled ( ) ) {
sb . append ( " CANCELLED " ) ;
} else if ( isDone ( ) ) {
addDoneString ( sb ) ;
} else {
try {
str = pendingToString ( ) ;
} catch ( RuntimeException e ) {
2022-03-22 15:40:06 +00:00
StringBuilder S = b . d . b . a . a . S ( " Exception thrown from implementation: " ) ;
S . append ( e . getClass ( ) ) ;
str = S . toString ( ) ;
2021-06-27 20:44:35 +00:00
}
if ( str ! = null & & ! str . isEmpty ( ) ) {
sb . append ( " PENDING, info=[ " ) ;
sb . append ( str ) ;
sb . append ( " ] " ) ;
} else if ( isDone ( ) ) {
addDoneString ( sb ) ;
} else {
sb . append ( " PENDING " ) ;
}
}
sb . append ( " ] " ) ;
return sb . toString ( ) ;
}
public final boolean wasInterrupted ( ) {
Object obj = this . value ;
return ( obj instanceof Cancellation ) & & ( ( Cancellation ) obj ) . wasInterrupted ;
}
}