### 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); } }