.class public Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute; .super Lorg/apache/http/impl/conn/tsccm/AbstractConnPool; .source "ConnPoolByRoute.java" # annotations .annotation runtime Ljava/lang/Deprecated; .end annotation # instance fields .field protected final connPerRoute:Lorg/apache/http/conn/params/ConnPerRoute; .field private final connTTL:J .field private final connTTLTimeUnit:Ljava/util/concurrent/TimeUnit; .field protected final freeConnections:Ljava/util/Queue; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Queue<", "Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;", ">;" } .end annotation .end field .field protected final leasedConnections:Ljava/util/Set; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Set<", "Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;", ">;" } .end annotation .end field .field private final log:Lorg/apache/commons/logging/Log; .field protected volatile maxTotalConnections:I .field protected volatile numConnections:I .field protected final operator:Lorg/apache/http/conn/ClientConnectionOperator; .field private final poolLock:Ljava/util/concurrent/locks/Lock; .field protected final routeToPool:Ljava/util/Map; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Map<", "Lorg/apache/http/conn/routing/HttpRoute;", "Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;", ">;" } .end annotation .end field .field protected volatile shutdown:Z .field protected final waitingThreads:Ljava/util/Queue; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Queue<", "Lorg/apache/http/impl/conn/tsccm/WaitingThread;", ">;" } .end annotation .end field # direct methods .method public constructor (Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/params/ConnPerRoute;I)V .registers 11 const-wide/16 v4, -0x1 .line 114 sget-object v6, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit; move-object v0, p0 move-object v1, p1 move-object v2, p2 move v3, p3 invoke-direct/range {v0 .. v6}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/params/ConnPerRoute;IJLjava/util/concurrent/TimeUnit;)V return-void .end method .method public constructor (Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/params/ConnPerRoute;IJLjava/util/concurrent/TimeUnit;)V .registers 8 .line 126 invoke-direct {p0}, Lorg/apache/http/impl/conn/tsccm/AbstractConnPool;->()V .line 73 invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v0 invoke-static {v0}, Lorg/apache/commons/logging/LogFactory;->getLog(Ljava/lang/Class;)Lorg/apache/commons/logging/Log; move-result-object v0 iput-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; .line 127 const-string v0, "Connection operator" invoke-static {p1, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 128 const-string v0, "Connections per route" invoke-static {p2, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 129 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/AbstractConnPool;->poolLock:Ljava/util/concurrent/locks/Lock; iput-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; .line 130 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/AbstractConnPool;->leasedConnections:Ljava/util/Set; iput-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->leasedConnections:Ljava/util/Set; .line 131 iput-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->operator:Lorg/apache/http/conn/ClientConnectionOperator; .line 132 iput-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->connPerRoute:Lorg/apache/http/conn/params/ConnPerRoute; .line 133 iput p3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->maxTotalConnections:I .line 134 invoke-virtual {p0}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createFreeConnQueue()Ljava/util/Queue; move-result-object p1 iput-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; .line 135 invoke-virtual {p0}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createWaitingThreadQueue()Ljava/util/Queue; move-result-object p1 iput-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->waitingThreads:Ljava/util/Queue; .line 136 invoke-virtual {p0}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createRouteToPoolMap()Ljava/util/Map; move-result-object p1 iput-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->routeToPool:Ljava/util/Map; .line 137 iput-wide p4, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->connTTL:J .line 138 iput-object p6, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->connTTLTimeUnit:Ljava/util/concurrent/TimeUnit; return-void .end method .method public constructor (Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/params/HttpParams;)V .registers 4 .annotation runtime Ljava/lang/Deprecated; .end annotation .line 152 invoke-static {p2}, Lorg/apache/http/conn/params/ConnManagerParams;->getMaxConnectionsPerRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/params/ConnPerRoute; move-result-object v0 invoke-static {p2}, Lorg/apache/http/conn/params/ConnManagerParams;->getMaxTotalConnections(Lorg/apache/http/params/HttpParams;)I move-result p2 invoke-direct {p0, p1, v0, p2}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/params/ConnPerRoute;I)V return-void .end method .method static synthetic access$000(Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;)Ljava/util/concurrent/locks/Lock; .registers 1 .line 71 iget-object p0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; return-object p0 .end method .method private closeConnection(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V .registers 4 .line 216 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getConnection()Lorg/apache/http/conn/OperatedClientConnection; move-result-object p1 if-eqz p1, :cond_12 .line 219 :try_start_6 invoke-interface {p1}, Lorg/apache/http/conn/OperatedClientConnection;->close()V :try_end_9 .catch Ljava/io/IOException; {:try_start_6 .. :try_end_9} :catch_a goto :goto_12 :catch_a move-exception p1 .line 221 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; const-string v1, "I/O error closing connection" invoke-interface {v0, v1, p1}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;Ljava/lang/Throwable;)V :cond_12 :goto_12 return-void .end method # virtual methods .method public closeExpiredConnections()V .registers 10 .line 744 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; const-string v1, "Closing expired connections" invoke-interface {v0, v1}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 745 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 747 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v2}, Ljava/util/concurrent/locks/Lock;->lock()V .line 749 :try_start_10 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {v2}, Ljava/util/Queue;->iterator()Ljava/util/Iterator; move-result-object v2 .line 750 :cond_16 :goto_16 invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z move-result v3 if-eqz v3, :cond_58 .line 751 invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v3 check-cast v3, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; .line 752 invoke-virtual {v3, v0, v1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->isExpired(J)Z move-result v4 if-eqz v4, :cond_16 .line 753 iget-object v4, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v4}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v4 if-eqz v4, :cond_51 .line 754 iget-object v4, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v5, Ljava/lang/StringBuilder; invoke-direct {v5}, Ljava/lang/StringBuilder;->()V const-string v6, "Closing connection expired @ " invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v5 new-instance v6, Ljava/util/Date; invoke-virtual {v3}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getExpiry()J move-result-wide v7 invoke-direct {v6, v7, v8}, Ljava/util/Date;->(J)V invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v5 invoke-interface {v4, v5}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 756 :cond_51 invoke-interface {v2}, Ljava/util/Iterator;->remove()V .line 757 invoke-virtual {p0, v3}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V :try_end_57 .catchall {:try_start_10 .. :try_end_57} :catchall_5e goto :goto_16 .line 761 :cond_58 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_5e move-exception v0 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V throw v0 .end method .method public closeIdleConnections(JLjava/util/concurrent/TimeUnit;)V .registers 10 .line 717 const-string v0, "Time unit" invoke-static {p3, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; const-wide/16 v0, 0x0 cmp-long v2, p1, v0 if-lez v2, :cond_c goto :goto_d :cond_c move-wide p1, v0 .line 719 :goto_d iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v0}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v0 if-eqz v0, :cond_33 .line 720 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v1, Ljava/lang/StringBuilder; const-string v2, "Closing connections idle longer than " invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v1, p1, p2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; move-result-object v1 const-string v2, " " invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-interface {v0, v1}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 723 :cond_33 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 invoke-virtual {p3, p1, p2}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J move-result-wide p1 sub-long/2addr v0, p1 .line 724 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->lock()V .line 726 :try_start_41 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {p1}, Ljava/util/Queue;->iterator()Ljava/util/Iterator; move-result-object p1 .line 727 :cond_47 :goto_47 invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z move-result p2 if-eqz p2, :cond_8b .line 728 invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object p2 check-cast p2, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; .line 729 invoke-virtual {p2}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getUpdated()J move-result-wide v2 cmp-long p3, v2, v0 if-gtz p3, :cond_47 .line 730 iget-object p3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {p3}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result p3 if-eqz p3, :cond_84 .line 731 iget-object p3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v2, Ljava/lang/StringBuilder; invoke-direct {v2}, Ljava/lang/StringBuilder;->()V const-string v3, "Closing connection last used @ " invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 new-instance v3, Ljava/util/Date; invoke-virtual {p2}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getUpdated()J move-result-wide v4 invoke-direct {v3, v4, v5}, Ljava/util/Date;->(J)V invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-interface {p3, v2}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 733 :cond_84 invoke-interface {p1}, Ljava/util/Iterator;->remove()V .line 734 invoke-virtual {p0, p2}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V :try_end_8a .catchall {:try_start_41 .. :try_end_8a} :catchall_91 goto :goto_47 .line 738 :cond_8b iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_91 move-exception p1 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p2}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method protected createEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Lorg/apache/http/conn/ClientConnectionOperator;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; .registers 11 .line 547 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v0}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v0 if-eqz v0, :cond_26 .line 548 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v1, Ljava/lang/StringBuilder; const-string v2, "Creating new connection [" invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v2 invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v1 const-string v2, "]" invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-interface {v0, v1}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 552 :cond_26 new-instance v0, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v4 iget-wide v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->connTTL:J iget-object v7, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->connTTLTimeUnit:Ljava/util/concurrent/TimeUnit; move-object v2, v0 move-object v3, p2 invoke-direct/range {v2 .. v7}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;JLjava/util/concurrent/TimeUnit;)V .line 554 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p2}, Ljava/util/concurrent/locks/Lock;->lock()V .line 556 :try_start_3a invoke-virtual {p1, v0}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->createdEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V .line 557 iget p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I add-int/lit8 p1, p1, 0x1 iput p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I .line 558 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->leasedConnections:Ljava/util/Set; invoke-interface {p1, v0}, Ljava/util/Set;->add(Ljava/lang/Object;)Z :try_end_48 .catchall {:try_start_3a .. :try_end_48} :catchall_4e .line 560 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-object v0 :catchall_4e move-exception p1 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p2}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method protected createFreeConnQueue()Ljava/util/Queue; .registers 2 .annotation system Ldalvik/annotation/Signature; value = { "()", "Ljava/util/Queue<", "Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;", ">;" } .end annotation .line 164 new-instance v0, Ljava/util/LinkedList; invoke-direct {v0}, Ljava/util/LinkedList;->()V return-object v0 .end method .method protected createRouteToPoolMap()Ljava/util/Map; .registers 2 .annotation system Ldalvik/annotation/Signature; value = { "()", "Ljava/util/Map<", "Lorg/apache/http/conn/routing/HttpRoute;", "Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;", ">;" } .end annotation .line 184 new-instance v0, Ljava/util/HashMap; invoke-direct {v0}, Ljava/util/HashMap;->()V return-object v0 .end method .method protected createWaitingThreadQueue()Ljava/util/Queue; .registers 2 .annotation system Ldalvik/annotation/Signature; value = { "()", "Ljava/util/Queue<", "Lorg/apache/http/impl/conn/tsccm/WaitingThread;", ">;" } .end annotation .line 174 new-instance v0, Ljava/util/LinkedList; invoke-direct {v0}, Ljava/util/LinkedList;->()V return-object v0 .end method .method public deleteClosedConnections()V .registers 4 .line 693 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V .line 695 :try_start_5 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {v0}, Ljava/util/Queue;->iterator()Ljava/util/Iterator; move-result-object v0 .line 696 :cond_b :goto_b invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v1 if-eqz v1, :cond_28 .line 697 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v1 check-cast v1, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; .line 698 invoke-virtual {v1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getConnection()Lorg/apache/http/conn/OperatedClientConnection; move-result-object v2 invoke-interface {v2}, Lorg/apache/http/conn/OperatedClientConnection;->isOpen()Z move-result v2 if-nez v2, :cond_b .line 699 invoke-interface {v0}, Ljava/util/Iterator;->remove()V .line 700 invoke-virtual {p0, v1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V :try_end_27 .catchall {:try_start_5 .. :try_end_27} :catchall_2e goto :goto_b .line 704 :cond_28 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_2e move-exception v0 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V throw v0 .end method .method protected deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V .registers 6 .line 580 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getPlannedRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v0 .line 582 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v1}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v1 if-eqz v1, :cond_34 .line 583 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v2, Ljava/lang/StringBuilder; const-string v3, "Deleting connection [" invoke-direct {v2, v3}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v2 const-string v3, "][" invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getState()Ljava/lang/Object; move-result-object v3 invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v2 const-string v3, "]" invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-interface {v1, v2}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 587 :cond_34 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->lock()V .line 590 :try_start_39 invoke-direct {p0, p1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->closeConnection(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V const/4 v1, 0x1 .line 592 invoke-virtual {p0, v0, v1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; move-result-object v2 .line 593 invoke-virtual {v2, p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)Z .line 594 iget p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I sub-int/2addr p1, v1 iput p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I .line 595 invoke-virtual {v2}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->isUnused()Z move-result p1 if-eqz p1, :cond_54 .line 596 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->routeToPool:Ljava/util/Map; invoke-interface {p1, v0}, Ljava/util/Map;->remove(Ljava/lang/Object;)Ljava/lang/Object; :try_end_54 .catchall {:try_start_39 .. :try_end_54} :catchall_5a .line 600 :cond_54 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_5a move-exception p1 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method protected deleteLeastUsedEntry()V .registers 3 .line 610 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V .line 613 :try_start_5 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {v0}, Ljava/util/Queue;->remove()Ljava/lang/Object; move-result-object v0 check-cast v0, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; if-eqz v0, :cond_13 .line 616 invoke-virtual {p0, v0}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V goto :goto_22 .line 617 :cond_13 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v0}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v0 if-eqz v0, :cond_22 .line 618 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; const-string v1, "No free connection to delete" invoke-interface {v0, v1}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V :try_end_22 .catchall {:try_start_5 .. :try_end_22} :catchall_28 .line 622 :cond_22 :goto_22 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_28 move-exception v0 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V throw v0 .end method .method public freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;ZJLjava/util/concurrent/TimeUnit;)V .registers 14 const-string v0, "Pooling connection [" const-string v1, "for " .line 429 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getPlannedRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v2 .line 430 iget-object v3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v3}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v3 const-string v4, "][" if-eqz v3, :cond_38 .line 431 iget-object v3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v5, Ljava/lang/StringBuilder; const-string v6, "Releasing connection [" invoke-direct {v5, v6}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v5, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getState()Ljava/lang/Object; move-result-object v6 invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v5 const-string v6, "]" invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v5 invoke-interface {v3, v5}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 435 :cond_38 iget-object v3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v3}, Ljava/util/concurrent/locks/Lock;->lock()V .line 437 :try_start_3d iget-boolean v3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->shutdown:Z if-eqz v3, :cond_4a .line 440 invoke-direct {p0, p1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->closeConnection(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V :try_end_44 .catchall {:try_start_3d .. :try_end_44} :catchall_cc .line 472 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void .line 445 :cond_4a :try_start_4a iget-object v3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->leasedConnections:Ljava/util/Set; invoke-interface {v3, p1}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z const/4 v3, 0x1 .line 447 invoke-virtual {p0, v2, v3}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; move-result-object v5 if-eqz p2, :cond_b8 .line 449 invoke-virtual {v5}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getCapacity()I move-result p2 if-ltz p2, :cond_b8 .line 450 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {p2}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result p2 if-eqz p2, :cond_ac const-wide/16 v6, 0x0 cmp-long p2, p3, v6 if-lez p2, :cond_82 .line 453 new-instance p2, Ljava/lang/StringBuilder; invoke-direct {p2, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p2, p3, p4}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; move-result-object p2 const-string v1, " " invoke-virtual {p2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p2 invoke-virtual {p2, p5}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object p2 invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p2 goto :goto_84 .line 455 :cond_82 const-string p2, "indefinitely" .line 457 :goto_84 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3, v0}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v3, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getState()Ljava/lang/Object; move-result-object v2 invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v0 const-string v2, "]; keep alive " invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p2 invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p2 invoke-interface {v1, p2}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 460 :cond_ac invoke-virtual {v5, p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V .line 461 invoke-virtual {p1, p3, p4, p5}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->updateExpiry(JLjava/util/concurrent/TimeUnit;)V .line 462 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {p2, p1}, Ljava/util/Queue;->add(Ljava/lang/Object;)Z goto :goto_c3 .line 464 :cond_b8 invoke-direct {p0, p1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->closeConnection(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V .line 465 invoke-virtual {v5}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->dropEntry()V .line 466 iget p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I sub-int/2addr p1, v3 iput p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I .line 469 :goto_c3 invoke-virtual {p0, v5}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->notifyWaitingThread(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V :try_end_c6 .catchall {:try_start_4a .. :try_end_c6} :catchall_cc .line 472 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_cc move-exception p1 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p2}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method public getConnectionsInPool()I .registers 3 .line 268 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V .line 270 :try_start_5 iget v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I :try_end_7 .catchall {:try_start_5 .. :try_end_7} :catchall_d .line 272 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V return v0 :catchall_d move-exception v0 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V throw v0 .end method .method public getConnectionsInPool(Lorg/apache/http/conn/routing/HttpRoute;)I .registers 3 .line 256 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V const/4 v0, 0x0 .line 259 :try_start_6 invoke-virtual {p0, p1, v0}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; move-result-object p1 if-eqz p1, :cond_10 .line 260 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getEntryCount()I move-result v0 :try_end_10 .catchall {:try_start_6 .. :try_end_10} :catchall_16 .line 263 :cond_10 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return v0 :catchall_16 move-exception p1 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method protected getEntryBlocking(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; .registers 16 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/conn/ConnectionPoolTimeoutException;, Ljava/lang/InterruptedException; } .end annotation const-wide/16 v0, 0x0 cmp-long v0, p3, v0 const/4 v1, 0x0 if-lez v0, :cond_16 .line 332 new-instance v0, Ljava/util/Date; invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v2 invoke-virtual {p5, p3, p4}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J move-result-wide p3 add-long/2addr v2, p3 invoke-direct {v0, v2, v3}, Ljava/util/Date;->(J)V goto :goto_17 :cond_16 move-object v0, v1 .line 337 :goto_17 iget-object p3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p3}, Ljava/util/concurrent/locks/Lock;->lock()V const/4 p3, 0x1 .line 340 :try_start_1d invoke-virtual {p0, p1, p3}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; move-result-object p4 move-object p5, v1 :cond_22 :goto_22 if-nez v1, :cond_17a .line 344 iget-boolean v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->shutdown:Z const/4 v2, 0x0 xor-int/2addr v1, p3 const-string v3, "Connection pool shut down" invoke-static {v1, v3}, Lorg/apache/http/util/Asserts;->check(ZLjava/lang/String;)V .line 346 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v1}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v1 :try_end_33 .catchall {:try_start_1d .. :try_end_33} :catchall_180 const-string v3, " out of " if-eqz v1, :cond_85 .line 347 :try_start_37 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v4, Ljava/lang/StringBuilder; invoke-direct {v4}, Ljava/lang/StringBuilder;->()V const-string v5, "[" invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v4 invoke-virtual {v4, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v4 const-string v5, "] total kept alive: " invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v4 iget-object v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {v5}, Ljava/util/Queue;->size()I move-result v5 invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v4 const-string v5, ", total issued: " invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v4 iget-object v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->leasedConnections:Ljava/util/Set; invoke-interface {v5}, Ljava/util/Set;->size()I move-result v5 invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v4 const-string v5, ", total allocated: " invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v4 iget v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v4 invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v4 iget v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->maxTotalConnections:I invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v4 invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v4 invoke-interface {v1, v4}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 358 :cond_85 invoke-virtual {p0, p4, p2}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getFreeEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; move-result-object v1 if-eqz v1, :cond_8d goto/16 :goto_17a .line 363 :cond_8d invoke-virtual {p4}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getCapacity()I move-result v4 if-lez v4, :cond_94 move v2, p3 .line 365 :cond_94 iget-object v4, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v4}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v4 :try_end_9a .catchall {:try_start_37 .. :try_end_9a} :catchall_180 const-string v5, "]" const-string v6, "][" if-eqz v4, :cond_de .line 366 :try_start_a0 iget-object v4, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v7, Ljava/lang/StringBuilder; invoke-direct {v7}, Ljava/lang/StringBuilder;->()V const-string v8, "Available capacity: " invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v7 invoke-virtual {p4}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getCapacity()I move-result v8 invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v7 invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {p4}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getMaxEntries()I move-result v7 invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v3 const-string v7, " [" invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 invoke-interface {v4, v3}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V :cond_de if-eqz v2, :cond_ee .line 371 iget v3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I iget v4, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->maxTotalConnections:I if-ge v3, v4, :cond_ee .line 373 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->operator:Lorg/apache/http/conn/ClientConnectionOperator; invoke-virtual {p0, p4, v1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Lorg/apache/http/conn/ClientConnectionOperator;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; move-result-object v1 goto/16 :goto_22 :cond_ee if-eqz v2, :cond_107 .line 375 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {v2}, Ljava/util/Queue;->isEmpty()Z move-result v2 if-nez v2, :cond_107 .line 377 invoke-virtual {p0}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->deleteLeastUsedEntry()V .line 380 invoke-virtual {p0, p1, p3}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; move-result-object p4 .line 381 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->operator:Lorg/apache/http/conn/ClientConnectionOperator; invoke-virtual {p0, p4, v1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Lorg/apache/http/conn/ClientConnectionOperator;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; move-result-object v1 goto/16 :goto_22 .line 385 :cond_107 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v2}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v2 if-eqz v2, :cond_133 .line 386 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3}, Ljava/lang/StringBuilder;->()V const-string v4, "Need to wait for connection [" invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 invoke-interface {v2, v3}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V :cond_133 if-nez p5, :cond_142 .line 391 iget-object p5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p5}, Ljava/util/concurrent/locks/Lock;->newCondition()Ljava/util/concurrent/locks/Condition; move-result-object p5 invoke-virtual {p0, p5, p4}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->newWaitingThread(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)Lorg/apache/http/impl/conn/tsccm/WaitingThread; move-result-object p5 .line 393 invoke-virtual {p6, p5}, Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;->setWaitingThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V :try_end_142 .catchall {:try_start_a0 .. :try_end_142} :catchall_180 .line 398 :cond_142 :try_start_142 invoke-virtual {p4, p5}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->queueThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V .line 399 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->waitingThreads:Ljava/util/Queue; invoke-interface {v2, p5}, Ljava/util/Queue;->add(Ljava/lang/Object;)Z .line 400 invoke-virtual {p5, v0}, Lorg/apache/http/impl/conn/tsccm/WaitingThread;->await(Ljava/util/Date;)Z move-result v2 :try_end_14e .catchall {:try_start_142 .. :try_end_14e} :catchall_170 .line 407 :try_start_14e invoke-virtual {p4, p5}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->removeThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V .line 408 iget-object v3, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->waitingThreads:Ljava/util/Queue; invoke-interface {v3, p5}, Ljava/util/Queue;->remove(Ljava/lang/Object;)Z if-nez v2, :cond_22 if-eqz v0, :cond_22 .line 412 invoke-virtual {v0}, Ljava/util/Date;->getTime()J move-result-wide v2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v4 cmp-long v2, v2, v4 if-lez v2, :cond_168 goto/16 :goto_22 .line 414 :cond_168 new-instance p1, Lorg/apache/http/conn/ConnectionPoolTimeoutException; const-string p2, "Timeout waiting for connection from pool" invoke-direct {p1, p2}, Lorg/apache/http/conn/ConnectionPoolTimeoutException;->(Ljava/lang/String;)V throw p1 :catchall_170 move-exception p1 .line 407 invoke-virtual {p4, p5}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->removeThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V .line 408 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->waitingThreads:Ljava/util/Queue; invoke-interface {p2, p5}, Ljava/util/Queue;->remove(Ljava/lang/Object;)Z throw p1 :try_end_17a .catchall {:try_start_14e .. :try_end_17a} :catchall_180 .line 421 :cond_17a :goto_17a iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-object v1 :catchall_180 move-exception p1 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p2}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method protected getFreeEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; .registers 11 .line 487 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V const/4 v0, 0x0 const/4 v1, 0x0 :goto_7 if-nez v1, :cond_d0 .line 492 :try_start_9 invoke-virtual {p1, p2}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->allocEntry(Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; move-result-object v0 :try_end_d .catchall {:try_start_9 .. :try_end_d} :catchall_c9 .line 494 const-string v2, "]" const-string v3, "][" const/4 v4, 0x1 if-eqz v0, :cond_96 .line 495 :try_start_14 iget-object v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v5}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v5 if-eqz v5, :cond_44 .line 496 iget-object v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v6, Ljava/lang/StringBuilder; invoke-direct {v6}, Ljava/lang/StringBuilder;->()V const-string v7, "Getting free connection [" invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v6 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v7 invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v6 invoke-virtual {v6, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v6 invoke-virtual {v6, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v6 invoke-virtual {v6, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v6 invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v6 invoke-interface {v5, v6}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 500 :cond_44 iget-object v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {v5, v0}, Ljava/util/Queue;->remove(Ljava/lang/Object;)Z .line 501 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v5 invoke-virtual {v0, v5, v6}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->isExpired(J)Z move-result v5 if-eqz v5, :cond_90 .line 504 iget-object v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v5}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v5 if-eqz v5, :cond_83 .line 505 iget-object v5, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v6, Ljava/lang/StringBuilder; invoke-direct {v6}, Ljava/lang/StringBuilder;->()V const-string v7, "Closing expired free connection [" invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v6 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v7 invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v6 invoke-virtual {v6, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-interface {v5, v2}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 508 :cond_83 invoke-direct {p0, v0}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->closeConnection(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V .line 512 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->dropEntry()V .line 513 iget v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I sub-int/2addr v2, v4 iput v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I goto/16 :goto_7 .line 515 :cond_90 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->leasedConnections:Ljava/util/Set; invoke-interface {v1, v0}, Ljava/util/Set;->add(Ljava/lang/Object;)Z goto :goto_c6 .line 521 :cond_96 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v1}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v1 if-eqz v1, :cond_c6 .line 522 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v5, Ljava/lang/StringBuilder; invoke-direct {v5}, Ljava/lang/StringBuilder;->()V const-string v6, "No free connections [" invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v6 invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-interface {v1, v2}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V :try_end_c6 .catchall {:try_start_14 .. :try_end_c6} :catchall_c9 :cond_c6 :goto_c6 move v1, v4 goto/16 :goto_7 :catchall_c9 move-exception p1 .line 528 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p2}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 :cond_d0 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-object v0 .end method .method protected getLock()Ljava/util/concurrent/locks/Lock; .registers 2 .line 142 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; return-object v0 .end method .method public getMaxTotalConnections()I .registers 2 .line 827 iget v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->maxTotalConnections:I return v0 .end method .method protected getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; .registers 4 .line 238 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V .line 241 :try_start_5 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->routeToPool:Ljava/util/Map; invoke-interface {v0, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; if-nez v0, :cond_1a if-eqz p2, :cond_1a .line 244 invoke-virtual {p0, p1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->newRouteSpecificPool(Lorg/apache/http/conn/routing/HttpRoute;)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; move-result-object v0 .line 245 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->routeToPool:Ljava/util/Map; invoke-interface {p2, p1, v0}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; :try_end_1a .catchall {:try_start_5 .. :try_end_1a} :catchall_20 .line 249 :cond_1a iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-object v0 :catchall_20 move-exception p1 iget-object p2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p2}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method protected handleLostEntry(Lorg/apache/http/conn/routing/HttpRoute;)V .registers 5 .line 629 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V const/4 v0, 0x1 .line 632 :try_start_6 invoke-virtual {p0, p1, v0}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; move-result-object v1 .line 633 invoke-virtual {v1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->dropEntry()V .line 634 invoke-virtual {v1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->isUnused()Z move-result v2 if-eqz v2, :cond_18 .line 635 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->routeToPool:Ljava/util/Map; invoke-interface {v2, p1}, Ljava/util/Map;->remove(Ljava/lang/Object;)Ljava/lang/Object; .line 638 :cond_18 iget p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I sub-int/2addr p1, v0 iput p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->numConnections:I .line 639 invoke-virtual {p0, v1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->notifyWaitingThread(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V :try_end_20 .catchall {:try_start_6 .. :try_end_20} :catchall_26 .line 642 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_26 move-exception p1 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method protected newRouteSpecificPool(Lorg/apache/http/conn/routing/HttpRoute;)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; .registers 4 .line 197 new-instance v0, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool; iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->connPerRoute:Lorg/apache/http/conn/params/ConnPerRoute; invoke-direct {v0, p1, v1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/conn/params/ConnPerRoute;)V return-object v0 .end method .method protected newWaitingThread(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)Lorg/apache/http/impl/conn/tsccm/WaitingThread; .registers 4 .line 212 new-instance v0, Lorg/apache/http/impl/conn/tsccm/WaitingThread; invoke-direct {v0, p1, p2}, Lorg/apache/http/impl/conn/tsccm/WaitingThread;->(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V return-object v0 .end method .method protected notifyWaitingThread(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V .registers 5 const-string v0, "Notifying thread waiting on pool [" .line 663 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->lock()V if-eqz p1, :cond_38 .line 666 :try_start_9 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->hasThread()Z move-result v1 if-eqz v1, :cond_38 .line 667 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v1}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v1 if-eqz v1, :cond_33 .line 668 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v2, Ljava/lang/StringBuilder; invoke-direct {v2, v0}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v0 invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v0 const-string v2, "]" invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-interface {v1, v0}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 671 :cond_33 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->nextThread()Lorg/apache/http/impl/conn/tsccm/WaitingThread; move-result-object p1 goto :goto_68 .line 672 :cond_38 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->waitingThreads:Ljava/util/Queue; invoke-interface {p1}, Ljava/util/Queue;->isEmpty()Z move-result p1 if-nez p1, :cond_58 .line 673 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {p1}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result p1 if-eqz p1, :cond_4f .line 674 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; const-string v0, "Notifying thread waiting on any pool" invoke-interface {p1, v0}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 676 :cond_4f iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->waitingThreads:Ljava/util/Queue; invoke-interface {p1}, Ljava/util/Queue;->remove()Ljava/lang/Object; move-result-object p1 check-cast p1, Lorg/apache/http/impl/conn/tsccm/WaitingThread; goto :goto_68 .line 677 :cond_58 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {p1}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result p1 if-eqz p1, :cond_67 .line 678 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; const-string v0, "Notifying no-one, there are no waiting threads" invoke-interface {p1, v0}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V :cond_67 const/4 p1, 0x0 :goto_68 if-eqz p1, :cond_6d .line 682 invoke-virtual {p1}, Lorg/apache/http/impl/conn/tsccm/WaitingThread;->wakeup()V :try_end_6d .catchall {:try_start_9 .. :try_end_6d} :catchall_73 .line 686 :cond_6d iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_73 move-exception p1 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method public requestPoolEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/PoolEntryRequest; .registers 5 .line 281 new-instance v0, Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter; invoke-direct {v0}, Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;->()V .line 283 new-instance v1, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute$1; invoke-direct {v1, p0, v0, p1, p2}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute$1;->(Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)V return-object v1 .end method .method public setMaxTotalConnections(I)V .registers 3 .line 814 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V .line 816 :try_start_5 iput p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->maxTotalConnections:I :try_end_7 .catchall {:try_start_5 .. :try_end_7} :catchall_d .line 818 iget-object p1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_d move-exception p1 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V throw p1 .end method .method public shutdown()V .registers 6 .line 767 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V .line 769 :try_start_5 iget-boolean v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->shutdown:Z :try_end_7 .catchall {:try_start_5 .. :try_end_7} :catchall_a0 if-eqz v0, :cond_f .line 806 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :cond_f const/4 v0, 0x1 .line 772 :try_start_10 iput-boolean v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->shutdown:Z .line 775 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->leasedConnections:Ljava/util/Set; invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator; move-result-object v0 .line 776 :goto_18 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v1 if-eqz v1, :cond_2b .line 777 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v1 check-cast v1, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; .line 778 invoke-interface {v0}, Ljava/util/Iterator;->remove()V .line 779 invoke-direct {p0, v1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->closeConnection(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V goto :goto_18 .line 783 :cond_2b iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeConnections:Ljava/util/Queue; invoke-interface {v0}, Ljava/util/Queue;->iterator()Ljava/util/Iterator; move-result-object v0 .line 784 :goto_31 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v1 if-eqz v1, :cond_7c .line 785 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v1 check-cast v1, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry; .line 786 invoke-interface {v0}, Ljava/util/Iterator;->remove()V .line 788 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; invoke-interface {v2}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z move-result v2 if-eqz v2, :cond_78 .line 789 iget-object v2, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->log:Lorg/apache/commons/logging/Log; new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3}, Ljava/lang/StringBuilder;->()V const-string v4, "Closing connection [" invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getPlannedRoute()Lorg/apache/http/conn/routing/HttpRoute; move-result-object v4 invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 const-string v4, "][" invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v1}, Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getState()Ljava/lang/Object; move-result-object v4 invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 const-string v4, "]" invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 invoke-interface {v2, v3}, Lorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V .line 792 :cond_78 invoke-direct {p0, v1}, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->closeConnection(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V goto :goto_31 .line 796 :cond_7c iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->waitingThreads:Ljava/util/Queue; invoke-interface {v0}, Ljava/util/Queue;->iterator()Ljava/util/Iterator; move-result-object v0 .line 797 :goto_82 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v1 if-eqz v1, :cond_95 .line 798 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v1 check-cast v1, Lorg/apache/http/impl/conn/tsccm/WaitingThread; .line 799 invoke-interface {v0}, Ljava/util/Iterator;->remove()V .line 800 invoke-virtual {v1}, Lorg/apache/http/impl/conn/tsccm/WaitingThread;->wakeup()V goto :goto_82 .line 803 :cond_95 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->routeToPool:Ljava/util/Map; invoke-interface {v0}, Ljava/util/Map;->clear()V :try_end_9a .catchall {:try_start_10 .. :try_end_9a} :catchall_a0 .line 806 iget-object v0, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V return-void :catchall_a0 move-exception v0 iget-object v1, p0, Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->poolLock:Ljava/util/concurrent/locks/Lock; invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V throw v0 .end method