what-the-bank/sources/com/google/common/util/concurrent/SequentialExecutor.java

283 lines
13 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package com.google.common.util.concurrent;
import com.airbnb.deeplinkdispatch.UrlTreeKt;
import com.google.common.base.Preconditions;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
import java.util.logging.Logger;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes2.dex */
public final class SequentialExecutor implements Executor {
private static final Logger log = Logger.getLogger(SequentialExecutor.class.getName());
private final Executor executor;
private final Deque<Runnable> queue = new ArrayDeque();
private WorkerRunningState workerRunningState = WorkerRunningState.IDLE;
private long workerRunCount = 0;
private final QueueWorker worker = new QueueWorker();
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes2.dex */
public enum WorkerRunningState {
IDLE,
QUEUING,
QUEUED,
RUNNING
}
static /* synthetic */ long access$308(SequentialExecutor sequentialExecutor) {
long j = sequentialExecutor.workerRunCount;
sequentialExecutor.workerRunCount = 1 + j;
return j;
}
/* JADX INFO: Access modifiers changed from: package-private */
public SequentialExecutor(Executor executor) {
this.executor = (Executor) Preconditions.checkNotNull(executor);
}
@Override // java.util.concurrent.Executor
public final void execute(Runnable runnable) {
Preconditions.checkNotNull(runnable);
synchronized (this.queue) {
if (this.workerRunningState != WorkerRunningState.RUNNING && this.workerRunningState != WorkerRunningState.QUEUED) {
long j = this.workerRunCount;
Runnable runnable2 = new Runnable(this, runnable) { // from class: com.google.common.util.concurrent.SequentialExecutor.1
final Runnable val$task;
{
this.val$task = runnable;
}
@Override // java.lang.Runnable
public void run() {
this.val$task.run();
}
public String toString() {
return this.val$task.toString();
}
};
this.queue.add(runnable2);
this.workerRunningState = WorkerRunningState.QUEUING;
try {
this.executor.execute(this.worker);
if (this.workerRunningState != WorkerRunningState.QUEUING) {
return;
}
synchronized (this.queue) {
if (this.workerRunCount == j && this.workerRunningState == WorkerRunningState.QUEUING) {
this.workerRunningState = WorkerRunningState.QUEUED;
}
}
return;
} catch (Error | RuntimeException e) {
synchronized (this.queue) {
boolean z = (this.workerRunningState == WorkerRunningState.IDLE || this.workerRunningState == WorkerRunningState.QUEUING) && this.queue.removeLastOccurrence(runnable2);
if (!(e instanceof RejectedExecutionException) || z) {
throw e;
}
}
return;
}
}
this.queue.add(runnable);
}
}
/* loaded from: classes2.dex */
final class QueueWorker implements Runnable {
Runnable task;
final SequentialExecutor this$0;
private QueueWorker(SequentialExecutor sequentialExecutor) {
this.this$0 = sequentialExecutor;
}
@Override // java.lang.Runnable
public final void run() {
try {
workOnQueue();
} catch (Error e) {
synchronized (this.this$0.queue) {
this.this$0.workerRunningState = WorkerRunningState.IDLE;
throw e;
}
}
}
/* JADX WARN: Code restructure failed: missing block: B:10:0x0054, code lost:
r0 = r0 | java.lang.Thread.interrupted();
*/
/* JADX WARN: Code restructure failed: missing block: B:12:0x0056, code lost:
r9.task.run();
*/
/* JADX WARN: Code restructure failed: missing block: B:16:0x005e, code lost:
r3 = move-exception;
*/
/* JADX WARN: Code restructure failed: missing block: B:17:0x005f, code lost:
r4 = com.google.common.util.concurrent.SequentialExecutor.log;
r5 = java.util.logging.Level.SEVERE;
r6 = java.lang.String.valueOf(r9.task);
r8 = new java.lang.StringBuilder(java.lang.String.valueOf(r6).length() + 35);
r8.append("Exception while executing runnable ");
r8.append(r6);
r4.log(r5, r8.toString(), (java.lang.Throwable) r3);
*/
/* JADX WARN: Code restructure failed: missing block: B:19:0x005c, code lost:
r1 = move-exception;
*/
/* JADX WARN: Code restructure failed: missing block: B:20:0x008d, code lost:
r9.task = null;
*/
/* JADX WARN: Code restructure failed: missing block: B:21:0x008f, code lost:
throw r1;
*/
/* JADX WARN: Code restructure failed: missing block: B:24:0x003d, code lost:
r9.this$0.workerRunningState = com.google.common.util.concurrent.SequentialExecutor.WorkerRunningState.IDLE;
*/
/* JADX WARN: Code restructure failed: missing block: B:28:0x004e, code lost:
return;
*/
/* JADX WARN: Code restructure failed: missing block: B:29:?, code lost:
return;
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
private void workOnQueue() {
/*
r9 = this;
r0 = 0
r1 = r0
L2:
com.google.common.util.concurrent.SequentialExecutor r2 = r9.this$0 // Catch: java.lang.Throwable -> L93
java.util.Deque r2 = com.google.common.util.concurrent.SequentialExecutor.access$100(r2) // Catch: java.lang.Throwable -> L93
monitor-enter(r2) // Catch: java.lang.Throwable -> L93
if (r1 != 0) goto L2d
com.google.common.util.concurrent.SequentialExecutor r1 = r9.this$0 // Catch: java.lang.Throwable -> L90
com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState r1 = com.google.common.util.concurrent.SequentialExecutor.access$200(r1) // Catch: java.lang.Throwable -> L90
com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState r3 = com.google.common.util.concurrent.SequentialExecutor.WorkerRunningState.RUNNING // Catch: java.lang.Throwable -> L90
if (r1 != r3) goto L20
monitor-exit(r2)
if (r0 == 0) goto L1f
java.lang.Thread r0 = java.lang.Thread.currentThread()
r0.interrupt()
L1f:
return
L20:
com.google.common.util.concurrent.SequentialExecutor r1 = r9.this$0 // Catch: java.lang.Throwable -> L90
com.google.common.util.concurrent.SequentialExecutor.access$308(r1) // Catch: java.lang.Throwable -> L90
com.google.common.util.concurrent.SequentialExecutor r1 = r9.this$0 // Catch: java.lang.Throwable -> L90
com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState r3 = com.google.common.util.concurrent.SequentialExecutor.WorkerRunningState.RUNNING // Catch: java.lang.Throwable -> L90
com.google.common.util.concurrent.SequentialExecutor.access$202(r1, r3) // Catch: java.lang.Throwable -> L90
r1 = 1
L2d:
com.google.common.util.concurrent.SequentialExecutor r3 = r9.this$0 // Catch: java.lang.Throwable -> L90
java.util.Deque r3 = com.google.common.util.concurrent.SequentialExecutor.access$100(r3) // Catch: java.lang.Throwable -> L90
java.lang.Object r3 = r3.poll() // Catch: java.lang.Throwable -> L90
java.lang.Runnable r3 = (java.lang.Runnable) r3 // Catch: java.lang.Throwable -> L90
r9.task = r3 // Catch: java.lang.Throwable -> L90
if (r3 != 0) goto L4f
com.google.common.util.concurrent.SequentialExecutor r1 = r9.this$0 // Catch: java.lang.Throwable -> L90
com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState r3 = com.google.common.util.concurrent.SequentialExecutor.WorkerRunningState.IDLE // Catch: java.lang.Throwable -> L90
com.google.common.util.concurrent.SequentialExecutor.access$202(r1, r3) // Catch: java.lang.Throwable -> L90
monitor-exit(r2)
if (r0 == 0) goto L4e
java.lang.Thread r0 = java.lang.Thread.currentThread()
r0.interrupt()
L4e:
return
L4f:
monitor-exit(r2)
boolean r2 = java.lang.Thread.interrupted() // Catch: java.lang.Throwable -> L93
r0 = r0 | r2
r2 = 0
java.lang.Runnable r3 = r9.task // Catch: java.lang.Throwable -> L5c java.lang.RuntimeException -> L5e
r3.run() // Catch: java.lang.Throwable -> L5c java.lang.RuntimeException -> L5e
goto L89
L5c:
r1 = move-exception
goto L8d
L5e:
r3 = move-exception
java.util.logging.Logger r4 = com.google.common.util.concurrent.SequentialExecutor.access$400() // Catch: java.lang.Throwable -> L5c
java.util.logging.Level r5 = java.util.logging.Level.SEVERE // Catch: java.lang.Throwable -> L5c
java.lang.Runnable r6 = r9.task // Catch: java.lang.Throwable -> L5c
java.lang.String r6 = java.lang.String.valueOf(r6) // Catch: java.lang.Throwable -> L5c
java.lang.String r7 = java.lang.String.valueOf(r6) // Catch: java.lang.Throwable -> L5c
int r7 = r7.length() // Catch: java.lang.Throwable -> L5c
java.lang.StringBuilder r8 = new java.lang.StringBuilder // Catch: java.lang.Throwable -> L5c
int r7 = r7 + 35
r8.<init>(r7) // Catch: java.lang.Throwable -> L5c
java.lang.String r7 = "Exception while executing runnable "
r8.append(r7) // Catch: java.lang.Throwable -> L5c
r8.append(r6) // Catch: java.lang.Throwable -> L5c
java.lang.String r6 = r8.toString() // Catch: java.lang.Throwable -> L5c
r4.log(r5, r6, r3) // Catch: java.lang.Throwable -> L5c
L89:
r9.task = r2 // Catch: java.lang.Throwable -> L93
goto L2
L8d:
r9.task = r2 // Catch: java.lang.Throwable -> L93
throw r1 // Catch: java.lang.Throwable -> L93
L90:
r1 = move-exception
monitor-exit(r2)
throw r1 // Catch: java.lang.Throwable -> L93
L93:
r1 = move-exception
if (r0 == 0) goto L9d
java.lang.Thread r0 = java.lang.Thread.currentThread()
r0.interrupt()
L9d:
throw r1
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.common.util.concurrent.SequentialExecutor.QueueWorker.workOnQueue():void");
}
public final String toString() {
Runnable runnable = this.task;
if (runnable == null) {
String valueOf = String.valueOf(this.this$0.workerRunningState);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 32);
sb.append("SequentialExecutorWorker{state=");
sb.append(valueOf);
sb.append(UrlTreeKt.componentParamSuffix);
return sb.toString();
}
String valueOf2 = String.valueOf(runnable);
StringBuilder sb2 = new StringBuilder(String.valueOf(valueOf2).length() + 34);
sb2.append("SequentialExecutorWorker{running=");
sb2.append(valueOf2);
sb2.append(UrlTreeKt.componentParamSuffix);
return sb2.toString();
}
}
public final String toString() {
int identityHashCode = System.identityHashCode(this);
String valueOf = String.valueOf(this.executor);
StringBuilder sb = new StringBuilder(String.valueOf(valueOf).length() + 32);
sb.append("SequentialExecutor@");
sb.append(identityHashCode);
sb.append(UrlTreeKt.componentParamPrefix);
sb.append(valueOf);
sb.append(UrlTreeKt.componentParamSuffix);
return sb.toString();
}
}