DelayedClientTransport.smali
.class Lio/grpc/internal/DelayedClientTransport;
.super Ljava/lang/Object;
.source "DelayedClientTransport.java"
# interfaces
.implements Lio/grpc/internal/ManagedClientTransport;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lio/grpc/internal/DelayedClientTransport$PendingPing;,
Lio/grpc/internal/DelayedClientTransport$PendingStream;
}
.end annotation
# instance fields
.field private backoffStatus:Lio/grpc/Status;
.field private listener:Lio/grpc/internal/ManagedClientTransport$Listener;
.field private final lock:Ljava/lang/Object;
.field private pendingPings:Ljava/util/Collection;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Collection<",
"Lio/grpc/internal/DelayedClientTransport$PendingPing;",
">;"
}
.end annotation
.end field
.field private pendingStreams:Ljava/util/Collection;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Collection<",
"Lio/grpc/internal/DelayedClientTransport$PendingStream;",
">;"
}
.end annotation
.end field
.field private shutdown:Z
.field private final streamCreationExecutor:Ljava/util/concurrent/Executor;
.field private volatile transportSupplier:Lcom/google/common/base/A;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/google/common/base/A<",
"Lio/grpc/internal/ClientTransport;",
">;"
}
.end annotation
.end field
# direct methods
.method constructor <init>(Ljava/util/concurrent/Executor;)V
.registers 3
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Ljava/lang/Object;
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
iput-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
.line 3
new-instance v0, Ljava/util/LinkedHashSet;
invoke-direct {v0}, Ljava/util/LinkedHashSet;-><init>()V
iput-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
.line 4
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->pendingPings:Ljava/util/Collection;
.line 5
iput-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->streamCreationExecutor:Ljava/util/concurrent/Executor;
return-void
.end method
.method static synthetic access$200(Lio/grpc/internal/DelayedClientTransport;)Ljava/lang/Object;
.registers 1
.line 1
iget-object p0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
return-object p0
.end method
.method static synthetic access$300(Lio/grpc/internal/DelayedClientTransport;)Lio/grpc/internal/ManagedClientTransport$Listener;
.registers 1
.line 1
iget-object p0, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
return-object p0
.end method
.method static synthetic access$500(Lio/grpc/internal/DelayedClientTransport;)Ljava/util/Collection;
.registers 1
.line 1
iget-object p0, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
return-object p0
.end method
.method static synthetic access$502(Lio/grpc/internal/DelayedClientTransport;Ljava/util/Collection;)Ljava/util/Collection;
.registers 2
.line 1
iput-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
return-object p1
.end method
.method static synthetic access$600(Lio/grpc/internal/DelayedClientTransport;)Z
.registers 1
.line 1
iget-boolean p0, p0, Lio/grpc/internal/DelayedClientTransport;->shutdown:Z
return p0
.end method
# virtual methods
.method endBackoff()V
.registers 3
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v0
const/4 v1, 0x0
.line 2
:try_start_4
iput-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->backoffStatus:Lio/grpc/Status;
.line 3
monitor-exit v0
return-void
:catchall_8
move-exception v1
monitor-exit v0
:try_end_a
.catchall {:try_start_4 .. :try_end_a} :catchall_8
throw v1
.end method
.method public getLogId()Ljava/lang/String;
.registers 2
.line 1
invoke-static {p0}, Lio/grpc/internal/GrpcUtil;->getLogId(Lio/grpc/internal/WithLogId;)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method getPendingStreamsCount()I
.registers 3
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v0
.line 2
:try_start_3
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
if-nez v1, :cond_9
const/4 v1, 0x0
goto :goto_f
:cond_9
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
invoke-interface {v1}, Ljava/util/Collection;->size()I
move-result v1
:goto_f
monitor-exit v0
return v1
:catchall_11
move-exception v1
.line 3
monitor-exit v0
:try_end_13
.catchall {:try_start_3 .. :try_end_13} :catchall_11
throw v1
.end method
.method getTransportSupplier()Lcom/google/common/base/A;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Lcom/google/common/base/A<",
"Lio/grpc/internal/ClientTransport;",
">;"
}
.end annotation
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->transportSupplier:Lcom/google/common/base/A;
return-object v0
.end method
.method public hasPendingStreams()Z
.registers 3
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v0
.line 2
:try_start_3
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
if-eqz v1, :cond_11
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
invoke-interface {v1}, Ljava/util/Collection;->isEmpty()Z
move-result v1
if-nez v1, :cond_11
const/4 v1, 0x1
goto :goto_12
:cond_11
const/4 v1, 0x0
:goto_12
monitor-exit v0
return v1
:catchall_14
move-exception v1
.line 3
monitor-exit v0
:try_end_16
.catchall {:try_start_3 .. :try_end_16} :catchall_14
throw v1
.end method
.method isInBackoffPeriod()Z
.registers 3
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v0
.line 2
:try_start_3
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->backoffStatus:Lio/grpc/Status;
if-eqz v1, :cond_9
const/4 v1, 0x1
goto :goto_a
:cond_9
const/4 v1, 0x0
:goto_a
monitor-exit v0
return v1
:catchall_c
move-exception v1
.line 3
monitor-exit v0
:try_end_e
.catchall {:try_start_3 .. :try_end_e} :catchall_c
throw v1
.end method
.method public newStream(Lio/grpc/MethodDescriptor;Lio/grpc/Metadata;)Lio/grpc/internal/ClientStream;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lio/grpc/MethodDescriptor<",
"**>;",
"Lio/grpc/Metadata;",
")",
"Lio/grpc/internal/ClientStream;"
}
.end annotation
.line 15
sget-object v0, Lio/grpc/CallOptions;->DEFAULT:Lio/grpc/CallOptions;
invoke-virtual {p0, p1, p2, v0}, Lio/grpc/internal/DelayedClientTransport;->newStream(Lio/grpc/MethodDescriptor;Lio/grpc/Metadata;Lio/grpc/CallOptions;)Lio/grpc/internal/ClientStream;
move-result-object p1
return-object p1
.end method
.method public newStream(Lio/grpc/MethodDescriptor;Lio/grpc/Metadata;Lio/grpc/CallOptions;)Lio/grpc/internal/ClientStream;
.registers 12
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lio/grpc/MethodDescriptor<",
"**>;",
"Lio/grpc/Metadata;",
"Lio/grpc/CallOptions;",
")",
"Lio/grpc/internal/ClientStream;"
}
.end annotation
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->transportSupplier:Lcom/google/common/base/A;
if-nez v0, :cond_47
.line 2
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v1
.line 3
:try_start_7
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->transportSupplier:Lcom/google/common/base/A;
if-nez v0, :cond_42
.line 4
iget-boolean v2, p0, Lio/grpc/internal/DelayedClientTransport;->shutdown:Z
if-nez v2, :cond_42
.line 5
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->backoffStatus:Lio/grpc/Status;
if-eqz v0, :cond_22
invoke-virtual {p3}, Lio/grpc/CallOptions;->isWaitForReady()Z
move-result v0
if-nez v0, :cond_22
.line 6
new-instance p1, Lio/grpc/internal/FailingClientStream;
iget-object p2, p0, Lio/grpc/internal/DelayedClientTransport;->backoffStatus:Lio/grpc/Status;
invoke-direct {p1, p2}, Lio/grpc/internal/FailingClientStream;-><init>(Lio/grpc/Status;)V
monitor-exit v1
return-object p1
.line 7
:cond_22
new-instance v0, Lio/grpc/internal/DelayedClientTransport$PendingStream;
const/4 v7, 0x0
move-object v2, v0
move-object v3, p0
move-object v4, p1
move-object v5, p2
move-object v6, p3
invoke-direct/range {v2 .. v7}, Lio/grpc/internal/DelayedClientTransport$PendingStream;-><init>(Lio/grpc/internal/DelayedClientTransport;Lio/grpc/MethodDescriptor;Lio/grpc/Metadata;Lio/grpc/CallOptions;Lio/grpc/internal/DelayedClientTransport$1;)V
.line 8
iget-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
invoke-interface {p1, v0}, Ljava/util/Collection;->add(Ljava/lang/Object;)Z
.line 9
iget-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
invoke-interface {p1}, Ljava/util/Collection;->size()I
move-result p1
const/4 p2, 0x1
if-ne p1, p2, :cond_40
.line 10
iget-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
invoke-interface {p1, p2}, Lio/grpc/internal/ManagedClientTransport$Listener;->transportInUse(Z)V
.line 11
:cond_40
monitor-exit v1
return-object v0
.line 12
:cond_42
monitor-exit v1
goto :goto_47
:catchall_44
move-exception p1
monitor-exit v1
:try_end_46
.catchall {:try_start_7 .. :try_end_46} :catchall_44
throw p1
:cond_47
:goto_47
if-eqz v0, :cond_54
.line 13
invoke-interface {v0}, Lcom/google/common/base/A;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lio/grpc/internal/ClientTransport;
invoke-interface {v0, p1, p2, p3}, Lio/grpc/internal/ClientTransport;->newStream(Lio/grpc/MethodDescriptor;Lio/grpc/Metadata;Lio/grpc/CallOptions;)Lio/grpc/internal/ClientStream;
move-result-object p1
return-object p1
.line 14
:cond_54
new-instance p1, Lio/grpc/internal/FailingClientStream;
sget-object p2, Lio/grpc/Status;->UNAVAILABLE:Lio/grpc/Status;
const-string p3, "transport shutdown"
invoke-virtual {p2, p3}, Lio/grpc/Status;->withDescription(Ljava/lang/String;)Lio/grpc/Status;
move-result-object p2
invoke-direct {p1, p2}, Lio/grpc/internal/FailingClientStream;-><init>(Lio/grpc/Status;)V
return-object p1
.end method
.method public ping(Lio/grpc/internal/ClientTransport$PingCallback;Ljava/util/concurrent/Executor;)V
.registers 6
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->transportSupplier:Lcom/google/common/base/A;
if-nez v0, :cond_20
.line 2
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v1
.line 3
:try_start_7
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->transportSupplier:Lcom/google/common/base/A;
if-nez v0, :cond_1b
.line 4
iget-boolean v2, p0, Lio/grpc/internal/DelayedClientTransport;->shutdown:Z
if-nez v2, :cond_1b
.line 5
new-instance v0, Lio/grpc/internal/DelayedClientTransport$PendingPing;
invoke-direct {v0, p1, p2}, Lio/grpc/internal/DelayedClientTransport$PendingPing;-><init>(Lio/grpc/internal/ClientTransport$PingCallback;Ljava/util/concurrent/Executor;)V
.line 6
iget-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingPings:Ljava/util/Collection;
invoke-interface {p1, v0}, Ljava/util/Collection;->add(Ljava/lang/Object;)Z
.line 7
monitor-exit v1
return-void
.line 8
:cond_1b
monitor-exit v1
goto :goto_20
:catchall_1d
move-exception p1
monitor-exit v1
:try_end_1f
.catchall {:try_start_7 .. :try_end_1f} :catchall_1d
throw p1
:cond_20
:goto_20
if-eqz v0, :cond_2c
.line 9
invoke-interface {v0}, Lcom/google/common/base/A;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lio/grpc/internal/ClientTransport;
invoke-interface {v0, p1, p2}, Lio/grpc/internal/ClientTransport;->ping(Lio/grpc/internal/ClientTransport$PingCallback;Ljava/util/concurrent/Executor;)V
return-void
.line 10
:cond_2c
new-instance v0, Lio/grpc/internal/DelayedClientTransport$1;
invoke-direct {v0, p0, p1}, Lio/grpc/internal/DelayedClientTransport$1;-><init>(Lio/grpc/internal/DelayedClientTransport;Lio/grpc/internal/ClientTransport$PingCallback;)V
invoke-interface {p2, v0}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V
return-void
.end method
.method public setTransport(Lio/grpc/internal/ClientTransport;)V
.registers 4
if-eq p0, p1, :cond_4
const/4 v0, 0x1
goto :goto_5
:cond_4
const/4 v0, 0x0
:goto_5
const-string v1, "delayed transport calling setTransport on itself"
.line 1
invoke-static {v0, v1}, Lcom/google/common/base/r;->a(ZLjava/lang/Object;)V
.line 2
invoke-static {p1}, Lcom/google/common/base/Suppliers;->a(Ljava/lang/Object;)Lcom/google/common/base/A;
move-result-object p1
invoke-virtual {p0, p1}, Lio/grpc/internal/DelayedClientTransport;->setTransportSupplier(Lcom/google/common/base/A;)V
return-void
.end method
.method public setTransportSupplier(Lcom/google/common/base/A;)V
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/common/base/A<",
"Lio/grpc/internal/ClientTransport;",
">;)V"
}
.end annotation
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v0
.line 2
:try_start_3
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->transportSupplier:Lcom/google/common/base/A;
if-eqz v1, :cond_9
.line 3
monitor-exit v0
return-void
.line 4
:cond_9
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
if-eqz v1, :cond_f
const/4 v1, 0x1
goto :goto_10
:cond_f
const/4 v1, 0x0
:goto_10
const-string v2, "start() not called"
invoke-static {v1, v2}, Lcom/google/common/base/r;->b(ZLjava/lang/Object;)V
const-string v1, "supplier"
.line 5
invoke-static {p1, v1}, Lcom/google/common/base/r;->a(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
move-object v1, p1
check-cast v1, Lcom/google/common/base/A;
iput-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->transportSupplier:Lcom/google/common/base/A;
.line 6
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingPings:Ljava/util/Collection;
invoke-interface {v1}, Ljava/util/Collection;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_25
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_3b
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v2
check-cast v2, Lio/grpc/internal/DelayedClientTransport$PendingPing;
.line 7
invoke-interface {p1}, Lcom/google/common/base/A;->get()Ljava/lang/Object;
move-result-object v3
check-cast v3, Lio/grpc/internal/ClientTransport;
invoke-virtual {v2, v3}, Lio/grpc/internal/DelayedClientTransport$PendingPing;->createRealPing(Lio/grpc/internal/ClientTransport;)V
goto :goto_25
:cond_3b
const/4 v1, 0x0
.line 8
iput-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingPings:Ljava/util/Collection;
.line 9
iget-boolean v2, p0, Lio/grpc/internal/DelayedClientTransport;->shutdown:Z
if-eqz v2, :cond_4b
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
if-eqz v2, :cond_4b
.line 10
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
invoke-interface {v2}, Lio/grpc/internal/ManagedClientTransport$Listener;->transportTerminated()V
.line 11
:cond_4b
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
if-eqz v2, :cond_63
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
invoke-interface {v2}, Ljava/util/Collection;->isEmpty()Z
move-result v2
if-nez v2, :cond_63
.line 12
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
.line 13
iget-object v3, p0, Lio/grpc/internal/DelayedClientTransport;->streamCreationExecutor:Ljava/util/concurrent/Executor;
new-instance v4, Lio/grpc/internal/DelayedClientTransport$2;
invoke-direct {v4, p0, v2, p1}, Lio/grpc/internal/DelayedClientTransport$2;-><init>(Lio/grpc/internal/DelayedClientTransport;Ljava/util/Collection;Lcom/google/common/base/A;)V
invoke-interface {v3, v4}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V
.line 14
:cond_63
iput-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
.line 15
iget-boolean p1, p0, Lio/grpc/internal/DelayedClientTransport;->shutdown:Z
if-nez p1, :cond_6e
.line 16
iget-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
invoke-interface {p1}, Lio/grpc/internal/ManagedClientTransport$Listener;->transportReady()V
.line 17
:cond_6e
monitor-exit v0
return-void
:catchall_70
move-exception p1
monitor-exit v0
:try_end_72
.catchall {:try_start_3 .. :try_end_72} :catchall_70
goto :goto_74
:goto_73
throw p1
:goto_74
goto :goto_73
.end method
.method public shutdown()V
.registers 5
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v0
.line 2
:try_start_3
iget-boolean v1, p0, Lio/grpc/internal/DelayedClientTransport;->shutdown:Z
if-eqz v1, :cond_9
.line 3
monitor-exit v0
return-void
:cond_9
const/4 v1, 0x1
.line 4
iput-boolean v1, p0, Lio/grpc/internal/DelayedClientTransport;->shutdown:Z
.line 5
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
sget-object v2, Lio/grpc/Status;->UNAVAILABLE:Lio/grpc/Status;
const-string v3, "Channel requested transport to shut down"
.line 6
invoke-virtual {v2, v3}, Lio/grpc/Status;->withDescription(Ljava/lang/String;)Lio/grpc/Status;
move-result-object v2
.line 7
invoke-interface {v1, v2}, Lio/grpc/internal/ManagedClientTransport$Listener;->transportShutdown(Lio/grpc/Status;)V
.line 8
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
if-eqz v1, :cond_25
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
invoke-interface {v1}, Ljava/util/Collection;->isEmpty()Z
move-result v1
if-eqz v1, :cond_2d
:cond_25
const/4 v1, 0x0
.line 9
iput-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
.line 10
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
invoke-interface {v1}, Lio/grpc/internal/ManagedClientTransport$Listener;->transportTerminated()V
.line 11
:cond_2d
monitor-exit v0
return-void
:catchall_2f
move-exception v1
monitor-exit v0
:try_end_31
.catchall {:try_start_3 .. :try_end_31} :catchall_2f
throw v1
.end method
.method public shutdownNow(Lio/grpc/Status;)V
.registers 5
.line 1
invoke-virtual {p0}, Lio/grpc/internal/DelayedClientTransport;->shutdown()V
.line 2
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v0
.line 3
:try_start_6
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
const/4 v2, 0x0
if-eqz v1, :cond_10
.line 4
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
.line 5
iput-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
goto :goto_11
:cond_10
move-object v1, v2
.line 6
:goto_11
monitor-exit v0
:try_end_12
.catchall {:try_start_6 .. :try_end_12} :catchall_2e
if-eqz v1, :cond_2d
.line 7
invoke-interface {v1}, Ljava/util/Collection;->iterator()Ljava/util/Iterator;
move-result-object v0
:goto_18
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
move-result v1
if-eqz v1, :cond_28
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lio/grpc/internal/DelayedClientTransport$PendingStream;
.line 8
invoke-virtual {v1, p1}, Lio/grpc/internal/DelayedClientTransport$PendingStream;->cancel(Lio/grpc/Status;)V
goto :goto_18
.line 9
:cond_28
iget-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
invoke-interface {p1}, Lio/grpc/internal/ManagedClientTransport$Listener;->transportTerminated()V
:cond_2d
return-void
:catchall_2e
move-exception p1
.line 10
:try_start_2f
monitor-exit v0
:try_end_30
.catchall {:try_start_2f .. :try_end_30} :catchall_2e
goto :goto_32
:goto_31
throw p1
:goto_32
goto :goto_31
.end method
.method public start(Lio/grpc/internal/ManagedClientTransport$Listener;)V
.registers 3
const-string v0, "listener"
.line 1
invoke-static {p1, v0}, Lcom/google/common/base/r;->a(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
check-cast p1, Lio/grpc/internal/ManagedClientTransport$Listener;
iput-object p1, p0, Lio/grpc/internal/DelayedClientTransport;->listener:Lio/grpc/internal/ManagedClientTransport$Listener;
return-void
.end method
.method startBackoff(Lio/grpc/Status;)V
.registers 7
.line 1
iget-object v0, p0, Lio/grpc/internal/DelayedClientTransport;->lock:Ljava/lang/Object;
monitor-enter v0
.line 2
:try_start_3
iget-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->backoffStatus:Lio/grpc/Status;
if-nez v1, :cond_9
const/4 v1, 0x1
goto :goto_a
:cond_9
const/4 v1, 0x0
:goto_a
invoke-static {v1}, Lcom/google/common/base/r;->b(Z)V
.line 3
sget-object v1, Lio/grpc/Status;->UNAVAILABLE:Lio/grpc/Status;
const-string v2, "Channel in TRANSIENT_FAILURE state"
invoke-virtual {v1, v2}, Lio/grpc/Status;->withDescription(Ljava/lang/String;)Lio/grpc/Status;
move-result-object v1
.line 4
invoke-virtual {p1}, Lio/grpc/Status;->asRuntimeException()Lio/grpc/StatusRuntimeException;
move-result-object v2
invoke-virtual {v1, v2}, Lio/grpc/Status;->withCause(Ljava/lang/Throwable;)Lio/grpc/Status;
move-result-object v1
iput-object v1, p0, Lio/grpc/internal/DelayedClientTransport;->backoffStatus:Lio/grpc/Status;
.line 5
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
.line 6
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
if-eqz v2, :cond_5d
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
invoke-interface {v2}, Ljava/util/Collection;->isEmpty()Z
move-result v2
if-nez v2, :cond_5d
.line 7
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->pendingStreams:Ljava/util/Collection;
invoke-interface {v2}, Ljava/util/Collection;->iterator()Ljava/util/Iterator;
move-result-object v2
.line 8
:cond_36
:goto_36
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v3
if-eqz v3, :cond_53
.line 9
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v3
check-cast v3, Lio/grpc/internal/DelayedClientTransport$PendingStream;
.line 10
# getter for: Lio/grpc/internal/DelayedClientTransport$PendingStream;->callOptions:Lio/grpc/CallOptions;
invoke-static {v3}, Lio/grpc/internal/DelayedClientTransport$PendingStream;->access$400(Lio/grpc/internal/DelayedClientTransport$PendingStream;)Lio/grpc/CallOptions;
move-result-object v4
invoke-virtual {v4}, Lio/grpc/CallOptions;->isWaitForReady()Z
move-result v4
if-nez v4, :cond_36
.line 11
invoke-virtual {v1, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 12
invoke-interface {v2}, Ljava/util/Iterator;->remove()V
goto :goto_36
.line 13
:cond_53
iget-object v2, p0, Lio/grpc/internal/DelayedClientTransport;->streamCreationExecutor:Ljava/util/concurrent/Executor;
new-instance v3, Lio/grpc/internal/DelayedClientTransport$3;
invoke-direct {v3, p0, v1, p1}, Lio/grpc/internal/DelayedClientTransport$3;-><init>(Lio/grpc/internal/DelayedClientTransport;Ljava/util/ArrayList;Lio/grpc/Status;)V
invoke-interface {v2, v3}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V
.line 14
:cond_5d
monitor-exit v0
return-void
:catchall_5f
move-exception p1
monitor-exit v0
:try_end_61
.catchall {:try_start_3 .. :try_end_61} :catchall_5f
goto :goto_63
:goto_62
throw p1
:goto_63
goto :goto_62
.end method