400 lines
16 KiB
Java
400 lines
16 KiB
Java
package io.grpc.internal;
|
|
|
|
import com.google.android.gms.common.internal.ServiceSpecificExtraArgs;
|
|
import com.google.common.base.Preconditions;
|
|
import io.grpc.Decompressor;
|
|
import io.grpc.internal.ApplicationThreadDeframerListener;
|
|
import io.grpc.internal.MessageDeframer;
|
|
import io.grpc.internal.StreamListener;
|
|
import java.io.Closeable;
|
|
import java.util.ArrayDeque;
|
|
import java.util.Queue;
|
|
import o.C13115fRJ;
|
|
import o.C13116fRL;
|
|
|
|
/* loaded from: classes6.dex */
|
|
final class MigratingThreadDeframer implements ThreadOptimizedDeframer {
|
|
private final ApplicationThreadDeframerListener appListener;
|
|
private final MessageDeframer deframer;
|
|
private boolean deframerOnTransportThread;
|
|
private boolean messageProducerEnqueued;
|
|
private final MigratingDeframerListener migratingListener;
|
|
private final ApplicationThreadDeframerListener.TransportExecutor transportExecutor;
|
|
private final MessageDeframer.Listener transportListener;
|
|
private final DeframeMessageProducer messageProducer = new DeframeMessageProducer(this);
|
|
private final Object lock = new Object();
|
|
private final Queue<Op> opQueue = new ArrayDeque();
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* loaded from: classes6.dex */
|
|
public interface Op {
|
|
void run(boolean z);
|
|
}
|
|
|
|
public MigratingThreadDeframer(MessageDeframer.Listener listener, ApplicationThreadDeframerListener.TransportExecutor transportExecutor, MessageDeframer messageDeframer) {
|
|
SquelchLateMessagesAvailableDeframerListener squelchLateMessagesAvailableDeframerListener = new SquelchLateMessagesAvailableDeframerListener((MessageDeframer.Listener) Preconditions.checkNotNull(listener, ServiceSpecificExtraArgs.CastExtraArgs.LISTENER));
|
|
this.transportListener = squelchLateMessagesAvailableDeframerListener;
|
|
this.transportExecutor = (ApplicationThreadDeframerListener.TransportExecutor) Preconditions.checkNotNull(transportExecutor, "transportExecutor");
|
|
ApplicationThreadDeframerListener applicationThreadDeframerListener = new ApplicationThreadDeframerListener(squelchLateMessagesAvailableDeframerListener, transportExecutor);
|
|
this.appListener = applicationThreadDeframerListener;
|
|
MigratingDeframerListener migratingDeframerListener = new MigratingDeframerListener(applicationThreadDeframerListener);
|
|
this.migratingListener = migratingDeframerListener;
|
|
messageDeframer.setListener(migratingDeframerListener);
|
|
this.deframer = messageDeframer;
|
|
}
|
|
|
|
@Override // io.grpc.internal.Deframer
|
|
public final void setMaxInboundMessageSize(int i) {
|
|
this.deframer.setMaxInboundMessageSize(i);
|
|
}
|
|
|
|
@Override // io.grpc.internal.Deframer
|
|
public final void setDecompressor(Decompressor decompressor) {
|
|
this.deframer.setDecompressor(decompressor);
|
|
}
|
|
|
|
@Override // io.grpc.internal.Deframer
|
|
public final void setFullStreamDecompressor(GzipInflatingBuffer gzipInflatingBuffer) {
|
|
this.deframer.setFullStreamDecompressor(gzipInflatingBuffer);
|
|
}
|
|
|
|
private boolean runWhereAppropriate(Op op) {
|
|
return runWhereAppropriate(op, true);
|
|
}
|
|
|
|
private boolean runWhereAppropriate(Op op, boolean z) {
|
|
boolean z2;
|
|
boolean z3;
|
|
synchronized (this.lock) {
|
|
z2 = this.deframerOnTransportThread;
|
|
z3 = this.messageProducerEnqueued;
|
|
if (!z2) {
|
|
this.opQueue.offer(op);
|
|
this.messageProducerEnqueued = true;
|
|
}
|
|
}
|
|
if (z2) {
|
|
op.run(true);
|
|
return true;
|
|
}
|
|
if (z3) {
|
|
return false;
|
|
}
|
|
if (z) {
|
|
C13115fRJ.f();
|
|
try {
|
|
this.transportListener.messagesAvailable(this.messageProducer);
|
|
return false;
|
|
} finally {
|
|
C13115fRJ.j();
|
|
}
|
|
}
|
|
this.transportExecutor.runOnTransportThread(new Runnable(this, C13115fRJ.h()) { // from class: io.grpc.internal.MigratingThreadDeframer.1
|
|
final MigratingThreadDeframer this$0;
|
|
final C13116fRL val$link;
|
|
|
|
{
|
|
this.this$0 = this;
|
|
this.val$link = r2;
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
C13115fRJ.f();
|
|
C13115fRJ.e();
|
|
try {
|
|
this.this$0.transportListener.messagesAvailable(this.this$0.messageProducer);
|
|
} finally {
|
|
C13115fRJ.j();
|
|
}
|
|
}
|
|
});
|
|
return false;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* renamed from: io.grpc.internal.MigratingThreadDeframer$1RequestOp, reason: invalid class name */
|
|
/* loaded from: classes6.dex */
|
|
public class C1RequestOp implements Op {
|
|
final MigratingThreadDeframer this$0;
|
|
final int val$numMessages;
|
|
|
|
C1RequestOp(MigratingThreadDeframer migratingThreadDeframer, int i) {
|
|
this.this$0 = migratingThreadDeframer;
|
|
this.val$numMessages = i;
|
|
}
|
|
|
|
@Override // io.grpc.internal.MigratingThreadDeframer.Op
|
|
public void run(boolean z) {
|
|
if (z) {
|
|
this.this$0.transportExecutor.runOnTransportThread(new Runnable(this, C13115fRJ.h()) { // from class: io.grpc.internal.MigratingThreadDeframer.1RequestOp.1
|
|
final C1RequestOp this$1;
|
|
final C13116fRL val$link;
|
|
|
|
{
|
|
this.this$1 = this;
|
|
this.val$link = r2;
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
C13115fRJ.f();
|
|
C13115fRJ.e();
|
|
try {
|
|
this.this$1.this$0.requestFromTransportThread(this.this$1.val$numMessages);
|
|
} finally {
|
|
C13115fRJ.j();
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
C13115fRJ.f();
|
|
try {
|
|
this.this$0.deframer.request(this.val$numMessages);
|
|
} finally {
|
|
try {
|
|
} finally {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // io.grpc.internal.ThreadOptimizedDeframer, io.grpc.internal.Deframer
|
|
public final void request(int i) {
|
|
runWhereAppropriate(new C1RequestOp(this, i), false);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public void requestFromTransportThread(int i) {
|
|
runWhereAppropriate(new Op(this, i) { // from class: io.grpc.internal.MigratingThreadDeframer.1RequestAgainOp
|
|
final MigratingThreadDeframer this$0;
|
|
final int val$numMessages;
|
|
|
|
{
|
|
this.this$0 = this;
|
|
this.val$numMessages = i;
|
|
}
|
|
|
|
@Override // io.grpc.internal.MigratingThreadDeframer.Op
|
|
public void run(boolean z) {
|
|
if (z) {
|
|
try {
|
|
this.this$0.deframer.request(this.val$numMessages);
|
|
} catch (Throwable th) {
|
|
this.this$0.appListener.deframeFailed(th);
|
|
this.this$0.deframer.close();
|
|
}
|
|
if (this.this$0.deframer.hasPendingDeliveries()) {
|
|
return;
|
|
}
|
|
synchronized (this.this$0.lock) {
|
|
C13115fRJ.b();
|
|
this.this$0.migratingListener.setDelegate(this.this$0.appListener);
|
|
this.this$0.deframerOnTransportThread = false;
|
|
}
|
|
return;
|
|
}
|
|
this.this$0.request(this.val$numMessages);
|
|
}
|
|
});
|
|
}
|
|
|
|
/* renamed from: io.grpc.internal.MigratingThreadDeframer$1DeframeOp, reason: invalid class name */
|
|
/* loaded from: classes6.dex */
|
|
class C1DeframeOp implements Op, Closeable {
|
|
final MigratingThreadDeframer this$0;
|
|
final ReadableBuffer val$data;
|
|
|
|
C1DeframeOp(MigratingThreadDeframer migratingThreadDeframer, ReadableBuffer readableBuffer) {
|
|
this.this$0 = migratingThreadDeframer;
|
|
this.val$data = readableBuffer;
|
|
}
|
|
|
|
@Override // io.grpc.internal.MigratingThreadDeframer.Op
|
|
public void run(boolean z) {
|
|
C13115fRJ.f();
|
|
try {
|
|
if (z) {
|
|
this.this$0.deframer.deframe(this.val$data);
|
|
return;
|
|
}
|
|
try {
|
|
this.this$0.deframer.deframe(this.val$data);
|
|
} catch (Throwable th) {
|
|
this.this$0.appListener.deframeFailed(th);
|
|
this.this$0.deframer.close();
|
|
}
|
|
} finally {
|
|
C13115fRJ.j();
|
|
}
|
|
}
|
|
|
|
@Override // java.io.Closeable, java.lang.AutoCloseable
|
|
public void close() {
|
|
this.val$data.close();
|
|
}
|
|
}
|
|
|
|
@Override // io.grpc.internal.Deframer
|
|
public final void deframe(ReadableBuffer readableBuffer) {
|
|
runWhereAppropriate(new C1DeframeOp(this, readableBuffer));
|
|
}
|
|
|
|
@Override // io.grpc.internal.Deframer
|
|
public final void closeWhenComplete() {
|
|
runWhereAppropriate(new Op(this) { // from class: io.grpc.internal.MigratingThreadDeframer.1CloseWhenCompleteOp
|
|
final MigratingThreadDeframer this$0;
|
|
|
|
{
|
|
this.this$0 = this;
|
|
}
|
|
|
|
@Override // io.grpc.internal.MigratingThreadDeframer.Op
|
|
public void run(boolean z) {
|
|
this.this$0.deframer.closeWhenComplete();
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override // io.grpc.internal.Deframer
|
|
public final void close() {
|
|
if (runWhereAppropriate(new Op(this) { // from class: io.grpc.internal.MigratingThreadDeframer.1CloseOp
|
|
final MigratingThreadDeframer this$0;
|
|
|
|
{
|
|
this.this$0 = this;
|
|
}
|
|
|
|
@Override // io.grpc.internal.MigratingThreadDeframer.Op
|
|
public void run(boolean z) {
|
|
this.this$0.deframer.close();
|
|
}
|
|
})) {
|
|
return;
|
|
}
|
|
this.deframer.stopDelivery();
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* loaded from: classes6.dex */
|
|
public class DeframeMessageProducer implements StreamListener.MessageProducer, Closeable {
|
|
final MigratingThreadDeframer this$0;
|
|
|
|
DeframeMessageProducer(MigratingThreadDeframer migratingThreadDeframer) {
|
|
this.this$0 = migratingThreadDeframer;
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:12:0x002d, code lost:
|
|
|
|
if (r4.this$0.deframer.hasPendingDeliveries() == false) goto L12;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:13:0x002f, code lost:
|
|
|
|
o.C13115fRJ.b();
|
|
r4.this$0.migratingListener.setDelegate(r4.this$0.transportListener);
|
|
r4.this$0.deframerOnTransportThread = true;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:14:0x0047, code lost:
|
|
|
|
r4.this$0.messageProducerEnqueued = false;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:16:0x004d, code lost:
|
|
|
|
return null;
|
|
*/
|
|
@Override // io.grpc.internal.StreamListener.MessageProducer
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
public java.io.InputStream next() {
|
|
/*
|
|
r4 = this;
|
|
L0:
|
|
io.grpc.internal.MigratingThreadDeframer r0 = r4.this$0
|
|
io.grpc.internal.ApplicationThreadDeframerListener r0 = io.grpc.internal.MigratingThreadDeframer.access$500(r0)
|
|
java.io.InputStream r0 = r0.messageReadQueuePoll()
|
|
if (r0 == 0) goto Ld
|
|
return r0
|
|
Ld:
|
|
io.grpc.internal.MigratingThreadDeframer r0 = r4.this$0
|
|
java.lang.Object r0 = io.grpc.internal.MigratingThreadDeframer.access$600(r0)
|
|
monitor-enter(r0)
|
|
io.grpc.internal.MigratingThreadDeframer r1 = r4.this$0 // Catch: java.lang.Throwable -> L54
|
|
java.util.Queue r1 = io.grpc.internal.MigratingThreadDeframer.access$900(r1) // Catch: java.lang.Throwable -> L54
|
|
java.lang.Object r1 = r1.poll() // Catch: java.lang.Throwable -> L54
|
|
io.grpc.internal.MigratingThreadDeframer$Op r1 = (io.grpc.internal.MigratingThreadDeframer.Op) r1 // Catch: java.lang.Throwable -> L54
|
|
r2 = 0
|
|
if (r1 != 0) goto L4f
|
|
io.grpc.internal.MigratingThreadDeframer r1 = r4.this$0 // Catch: java.lang.Throwable -> L54
|
|
io.grpc.internal.MessageDeframer r1 = io.grpc.internal.MigratingThreadDeframer.access$400(r1) // Catch: java.lang.Throwable -> L54
|
|
boolean r1 = r1.hasPendingDeliveries() // Catch: java.lang.Throwable -> L54
|
|
if (r1 == 0) goto L47
|
|
o.C13115fRJ.b() // Catch: java.lang.Throwable -> L54
|
|
io.grpc.internal.MigratingThreadDeframer r1 = r4.this$0 // Catch: java.lang.Throwable -> L54
|
|
io.grpc.internal.MigratingThreadDeframer$MigratingDeframerListener r1 = io.grpc.internal.MigratingThreadDeframer.access$700(r1) // Catch: java.lang.Throwable -> L54
|
|
io.grpc.internal.MigratingThreadDeframer r3 = r4.this$0 // Catch: java.lang.Throwable -> L54
|
|
io.grpc.internal.MessageDeframer$Listener r3 = io.grpc.internal.MigratingThreadDeframer.access$100(r3) // Catch: java.lang.Throwable -> L54
|
|
r1.setDelegate(r3) // Catch: java.lang.Throwable -> L54
|
|
io.grpc.internal.MigratingThreadDeframer r1 = r4.this$0 // Catch: java.lang.Throwable -> L54
|
|
r3 = 1
|
|
io.grpc.internal.MigratingThreadDeframer.access$802(r1, r3) // Catch: java.lang.Throwable -> L54
|
|
L47:
|
|
io.grpc.internal.MigratingThreadDeframer r1 = r4.this$0 // Catch: java.lang.Throwable -> L54
|
|
io.grpc.internal.MigratingThreadDeframer.access$1002(r1, r2) // Catch: java.lang.Throwable -> L54
|
|
monitor-exit(r0)
|
|
r0 = 0
|
|
return r0
|
|
L4f:
|
|
monitor-exit(r0)
|
|
r1.run(r2)
|
|
goto L0
|
|
L54:
|
|
r1 = move-exception
|
|
monitor-exit(r0)
|
|
throw r1
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: io.grpc.internal.MigratingThreadDeframer.DeframeMessageProducer.next():java.io.InputStream");
|
|
}
|
|
|
|
@Override // java.io.Closeable, java.lang.AutoCloseable
|
|
public void close() {
|
|
Op op;
|
|
while (true) {
|
|
synchronized (this.this$0.lock) {
|
|
do {
|
|
op = (Op) this.this$0.opQueue.poll();
|
|
if (op == null) {
|
|
break;
|
|
}
|
|
} while (!(op instanceof Closeable));
|
|
if (op == null) {
|
|
this.this$0.messageProducerEnqueued = false;
|
|
return;
|
|
}
|
|
}
|
|
GrpcUtil.closeQuietly((Closeable) op);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes6.dex */
|
|
static class MigratingDeframerListener extends ForwardingDeframerListener {
|
|
private MessageDeframer.Listener delegate;
|
|
|
|
public MigratingDeframerListener(MessageDeframer.Listener listener) {
|
|
setDelegate(listener);
|
|
}
|
|
|
|
public void setDelegate(MessageDeframer.Listener listener) {
|
|
this.delegate = (MessageDeframer.Listener) Preconditions.checkNotNull(listener, "delegate");
|
|
}
|
|
|
|
@Override // io.grpc.internal.ForwardingDeframerListener
|
|
protected MessageDeframer.Listener delegate() {
|
|
return this.delegate;
|
|
}
|
|
}
|
|
}
|