### Eclipse Workspace Patch 1.0
#P org.eclipse.mylyn.bugzilla.core
Index: src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java,v
retrieving revision 1.224
diff -u -r1.224 BugzillaClient.java
--- src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java 17 Feb 2010 00:52:56 -0000 1.224
+++ src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java 4 Mar 2010 23:47:27 -0000
@@ -642,7 +642,7 @@
} finally {
attempt++;
if (method != null) {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
}
#P org.eclipse.mylyn.commons.net
Index: src/org/eclipse/mylyn/commons/net/WebUtil.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.commons.net/src/org/eclipse/mylyn/commons/net/WebUtil.java,v
retrieving revision 1.28
diff -u -r1.28 WebUtil.java
--- src/org/eclipse/mylyn/commons/net/WebUtil.java 13 Oct 2009 02:20:40 -0000 1.28
+++ src/org/eclipse/mylyn/commons/net/WebUtil.java 4 Mar 2010 23:47:28 -0000
@@ -18,8 +18,8 @@
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Proxy;
-import java.net.Socket;
import java.net.Proxy.Type;
+import java.net.Socket;
import java.text.ParseException;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
@@ -549,7 +549,7 @@
}
}
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
} finally {
monitor.done();
@@ -776,4 +776,23 @@
return Proxy.NO_PROXY;
}
+ /**
+ * Releases the connection used by method
. If monitor
is cancelled the connection is
+ * aborted to avoid blocking.
+ *
+ * @since 3.4
+ */
+ public static void releaseConnection(HttpMethodBase method, IProgressMonitor monitor) {
+ if (monitor != null && monitor.isCanceled()) {
+ // force a connection close on cancel to avoid blocking to do reading the remainder of the response
+ method.abort();
+ } else {
+ try {
+ method.releaseConnection();
+ } catch (NullPointerException e) {
+ // ignore, see bug 255417
+ }
+ }
+ }
+
}
#P org.eclipse.mylyn.commons.tests
Index: src/org/eclipse/mylyn/commons/tests/net/WebUtilTest.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.commons.tests/src/org/eclipse/mylyn/commons/tests/net/WebUtilTest.java,v
retrieving revision 1.8
diff -u -r1.8 WebUtilTest.java
--- src/org/eclipse/mylyn/commons/tests/net/WebUtilTest.java 11 Jan 2010 02:23:40 -0000 1.8
+++ src/org/eclipse/mylyn/commons/tests/net/WebUtilTest.java 4 Mar 2010 23:47:29 -0000
@@ -14,9 +14,9 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
+import java.net.Proxy.Type;
import java.net.Socket;
import java.net.SocketException;
-import java.net.Proxy.Type;
import javax.net.ssl.SSLHandshakeException;
@@ -141,7 +141,7 @@
int result = WebUtil.execute(client, hostConfiguration, method, monitor);
assertEquals(HttpStatus.SC_OK, result);
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
@@ -170,7 +170,7 @@
} catch (OperationCanceledException expected) {
assertTrue(monitor.isCanceled());
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
@@ -188,7 +188,7 @@
fail("Expected InterruptedIOException");
} catch (OperationCanceledException expected) {
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
#P org.eclipse.mylyn.oslc.core
Index: src/org/eclipse/mylyn/internal/oslc/core/client/AbstractOslcClient.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.oslc.core/src/org/eclipse/mylyn/internal/oslc/core/client/AbstractOslcClient.java,v
retrieving revision 1.5
diff -u -r1.5 AbstractOslcClient.java
--- src/org/eclipse/mylyn/internal/oslc/core/client/AbstractOslcClient.java 22 Feb 2010 00:45:54 -0000 1.5
+++ src/org/eclipse/mylyn/internal/oslc/core/client/AbstractOslcClient.java 4 Mar 2010 23:47:30 -0000
@@ -29,6 +29,7 @@
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.PutMethod;
+import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -458,23 +459,23 @@
protected T executeMethod(HttpMethodBase method, RequestHandler handler, IProgressMonitor monitor)
throws CoreException {
+ Assert.isNotNull(method);
monitor = Policy.monitorFor(monitor);
try {
monitor.beginTask(handler.getRequestName(), IProgressMonitor.UNKNOWN);
HostConfiguration hostConfiguration = WebUtil.createHostConfiguration(httpClient, location, monitor);
- int code = WebUtil.execute(httpClient, hostConfiguration, method, monitor);
-
- handler.handleReturnCode(code, method);
-
- return handler.run(method, monitor);
+ try {
+ int code = WebUtil.execute(httpClient, hostConfiguration, method, monitor);
+ handler.handleReturnCode(code, method);
+ return handler.run(method, monitor);
+ } finally {
+ WebUtil.releaseConnection(method, monitor);
+ }
} catch (IOException e) {
throw new CoreException(new Status(IStatus.WARNING, IOslcCoreConstants.ID_PLUGIN,
"An unexpected network error has occurred: " + e.getMessage(), e)); //$NON-NLS-1$
} finally {
- if (method != null) {
- method.releaseConnection();
- }
monitor.done();
}
#P org.eclipse.mylyn.trac.core
Index: src/org/eclipse/mylyn/internal/trac/core/client/AbstractTracClient.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/AbstractTracClient.java,v
retrieving revision 1.14
diff -u -r1.14 AbstractTracClient.java
--- src/org/eclipse/mylyn/internal/trac/core/client/AbstractTracClient.java 24 Feb 2010 01:34:53 -0000 1.14
+++ src/org/eclipse/mylyn/internal/trac/core/client/AbstractTracClient.java 4 Mar 2010 23:47:31 -0000
@@ -114,7 +114,7 @@
throw new TracLoginException();
}
} finally {
- post.releaseConnection();
+ WebUtil.releaseConnection(post, monitor);
}
}
Index: src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java,v
retrieving revision 1.23
diff -u -r1.23 TracWebClient.java
--- src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java 24 Feb 2010 01:43:22 -0000 1.23
+++ src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java 4 Mar 2010 23:47:31 -0000
@@ -46,11 +46,11 @@
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.commons.net.HtmlStreamTokenizer;
+import org.eclipse.mylyn.commons.net.HtmlStreamTokenizer.Token;
import org.eclipse.mylyn.commons.net.HtmlTag;
import org.eclipse.mylyn.commons.net.Policy;
import org.eclipse.mylyn.commons.net.UnsupportedRequestException;
import org.eclipse.mylyn.commons.net.WebUtil;
-import org.eclipse.mylyn.commons.net.HtmlStreamTokenizer.Token;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.model.TracComponent;
import org.eclipse.mylyn.internal.trac.core.model.TracMilestone;
@@ -58,16 +58,16 @@
import org.eclipse.mylyn.internal.trac.core.model.TracRepositoryInfo;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter;
+import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter.CompareOperator;
import org.eclipse.mylyn.internal.trac.core.model.TracSeverity;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket;
+import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketResolution;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketStatus;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketType;
import org.eclipse.mylyn.internal.trac.core.model.TracVersion;
-import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter.CompareOperator;
-import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
-import org.eclipse.mylyn.internal.trac.core.util.TracUtil;
import org.eclipse.mylyn.internal.trac.core.util.TracHttpClientTransportFactory.TracHttpException;
+import org.eclipse.mylyn.internal.trac.core.util.TracUtil;
/**
* Represents a Trac repository that is accessed through the Trac's query script and web interface.
@@ -103,17 +103,17 @@
try {
code = WebUtil.execute(httpClient, hostConfiguration, method, monitor);
} catch (IOException e) {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
throw e;
} catch (RuntimeException e) {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
throw e;
}
if (code == HttpURLConnection.HTTP_OK) {
return method;
} else {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
if (code == HttpURLConnection.HTTP_UNAUTHORIZED || code == HttpURLConnection.HTTP_FORBIDDEN) {
// login or re-authenticate due to an expired session
authenticated = false;
@@ -153,7 +153,7 @@
continue;
}
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
// the expected return code is a redirect, anything else is suspicious
@@ -306,7 +306,7 @@
} catch (ParseException e) {
throw new TracException(e);
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
@@ -377,7 +377,7 @@
} catch (IOException e) {
throw new TracException(e);
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
@@ -411,7 +411,7 @@
try {
return new TracRepositoryInfo();
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
@@ -450,7 +450,7 @@
} catch (ParseException e) {
throw new TracException(e);
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
@@ -655,7 +655,7 @@
} catch (ParseException e) {
throw new TracException(e);
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}
@@ -739,7 +739,7 @@
// release the connection
return method.getResponseBodyAsStream();
} catch (IOException e) {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
throw new TracException(e);
}
}
Index: src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java,v
retrieving revision 1.30
diff -u -r1.30 TracXmlRpcClient.java
--- src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java 22 Feb 2010 02:47:56 -0000 1.30
+++ src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java 4 Mar 2010 23:47:31 -0000
@@ -69,20 +69,20 @@
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracSeverity;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket;
+import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketField;
+import org.eclipse.mylyn.internal.trac.core.model.TracTicketField.Type;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketResolution;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketStatus;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketType;
import org.eclipse.mylyn.internal.trac.core.model.TracVersion;
import org.eclipse.mylyn.internal.trac.core.model.TracWikiPage;
import org.eclipse.mylyn.internal.trac.core.model.TracWikiPageInfo;
-import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
-import org.eclipse.mylyn.internal.trac.core.model.TracTicketField.Type;
import org.eclipse.mylyn.internal.trac.core.util.HttpMethodInterceptor;
import org.eclipse.mylyn.internal.trac.core.util.TracHttpClientTransportFactory;
+import org.eclipse.mylyn.internal.trac.core.util.TracHttpClientTransportFactory.TracHttpException;
import org.eclipse.mylyn.internal.trac.core.util.TracUtil;
import org.eclipse.mylyn.internal.trac.core.util.TracXmlRpcClientRequest;
-import org.eclipse.mylyn.internal.trac.core.util.TracHttpClientTransportFactory.TracHttpException;
import org.eclipse.osgi.util.NLS;
/**
@@ -416,7 +416,7 @@
} catch (IOException e) {
// ignore
} finally {
- method.releaseConnection();
+ WebUtil.releaseConnection(method, monitor);
}
}