You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2008/10/27 14:27:39 UTC
svn commit: r708170 - in /httpcomponents/httpclient/trunk: ./
module-client/src/main/java/org/apache/http/impl/conn/
module-client/src/main/java/org/apache/http/impl/conn/tsccm/
Author: olegk
Date: Mon Oct 27 06:27:39 2008
New Revision: 708170
URL: http://svn.apache.org/viewvc?rev=708170&view=rev
Log:
Fixed bug that can cause a managed connection to be returned from the pool in an inconsistent state
Modified:
httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/AbstractPoolEntry.java
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java
Modified: httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/RELEASE_NOTES.txt?rev=708170&r1=708169&r2=708170&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/RELEASE_NOTES.txt (original)
+++ httpcomponents/httpclient/trunk/RELEASE_NOTES.txt Mon Oct 27 06:27:39 2008
@@ -1,3 +1,11 @@
+Changes since 4.0 beta 1
+-------------------
+
+* Fixed bug that can cause a managed connection to be returned from the
+ pool in an inconsistent state.
+ Contributed by Oleg Kalnichevski <olegk at apache.org>
+
+
4.0 Beta 1
-------------------
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/AbstractPoolEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/AbstractPoolEntry.java?rev=708170&r1=708169&r2=708170&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/AbstractPoolEntry.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/AbstractPoolEntry.java Mon Oct 27 06:27:39 2008
@@ -315,6 +315,7 @@
*/
protected void shutdownEntry() {
tracker = null;
+ state = null;
}
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java?rev=708170&r1=708169&r2=708170&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/BasicPoolEntry.java Mon Oct 27 06:27:39 2008
@@ -82,6 +82,10 @@
return this.reference;
}
+ @Override
+ protected void shutdownEntry() {
+ super.shutdownEntry();
+ }
} // class BasicPoolEntry
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java?rev=708170&r1=708169&r2=708170&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java Mon Oct 27 06:27:39 2008
@@ -151,15 +151,15 @@
ListIterator<BasicPoolEntry> it = freeEntries.listIterator(freeEntries.size());
while (it.hasPrevious()) {
BasicPoolEntry entry = it.previous();
- if (LangUtils.equals(state, entry.getState())) {
+ if (entry.getState() == null || LangUtils.equals(state, entry.getState())) {
it.remove();
return entry;
}
}
}
- if (!freeEntries.isEmpty()) {
- BasicPoolEntry entry = freeEntries.remove();
- entry.setState(null);
+ if (getCapacity() == 0 && !freeEntries.isEmpty()) {
+ BasicPoolEntry entry = freeEntries.remove();
+ entry.shutdownEntry();
OperatedClientConnection conn = entry.getConnection();
try {
conn.close();