Author: markt Date: Sun Feb 22 18:49:22 2015 New Revision: 1661514 URL: http://svn.apache.org/r1661514 Log: isCloseRequired -> Closed Align behaviour of methods with closed state
Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties?rev=1661514&r1=1661513&r2=1661514&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties Sun Feb 22 18:49:22 2015 @@ -25,11 +25,13 @@ upgrade.sis.isReady.ise=It is illegal to upgrade.sis.onErrorFail=onError processing for the registered ReadListener triggered this further error which was swallowed upgrade.sis.readListener.null=It is illegal to pass null to setReadListener() upgrade.sis.readListener.set=It is illegal to call setReadListener() more than once for the same upgraded connection +upgrade.sis.read.closed=The InputStream has been closed upgrade.sis.read.ise=It is illegal to call any of the read() methods in non-blocking mode without first checking that there is data available by calling isReady() upgrade.sos.errorCloseFail=Failed to close OutputStream cleanly after a previous error upgrade.sos.canWrite.ise=It is illegal to call canWrite() when the ServletOutputStream is not in non-blocking mode (i.e. setWriteListener() must be called first) upgrade.sos.onErrorFail=onError processing for the registered WriteListener triggered this further error which was swallowed upgrade.sos.writeListener.null=It is illegal to pass null to setWriteListener() upgrade.sos.writeListener.set=It is illegal to call setWriteListener() more than once for the same upgraded connection +upgrade.sos.write.closed=The OutputStream has been closed upgrade.sos.write.ise=It is illegal to call any of the write() methods in non-blocking mode without first checking that there is space available by calling isReady() Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java?rev=1661514&r1=1661513&r2=1661514&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java Sun Feb 22 18:49:22 2015 @@ -123,12 +123,12 @@ public class UpgradeProcessor implements } return SocketState.CLOSED; } - if (upgradeServletInputStream.isCloseRequired() || - upgradeServletOutputStream.isCloseRequired()) { + if (upgradeServletInputStream.isClosed() || + upgradeServletOutputStream.isClosed()) { if (log.isDebugEnabled()) { log.debug(sm.getString("upgradeProcessor.requiredClose", - Boolean.valueOf(upgradeServletInputStream.isCloseRequired()), - Boolean.valueOf(upgradeServletOutputStream.isCloseRequired()))); + Boolean.valueOf(upgradeServletInputStream.isClosed()), + Boolean.valueOf(upgradeServletOutputStream.isClosed()))); } return SocketState.CLOSED; } Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java?rev=1661514&r1=1661513&r2=1661514&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java Sun Feb 22 18:49:22 2015 @@ -35,7 +35,7 @@ public class UpgradeServletInputStream e private final SocketWrapperBase<?> socketWrapper; - private volatile boolean closeRequired = false; + private volatile boolean closed = false; // Start in blocking-mode private volatile Boolean ready = Boolean.TRUE; private volatile ReadListener listener = null; @@ -66,6 +66,10 @@ public class UpgradeServletInputStream e sm.getString("upgrade.sis.isReady.ise")); } + if (closed) { + return false; + } + // If we already know the current state, return it. if (ready != null) { return ready.booleanValue(); @@ -90,6 +94,10 @@ public class UpgradeServletInputStream e throw new IllegalArgumentException( sm.getString("upgrade.sis.readListener.set")); } + if (closed) { + throw new IllegalStateException(sm.getString("upgrade.sis.read.closed")); + } + this.listener = listener; this.applicationLoader = Thread.currentThread().getContextClassLoader(); // Switching to non-blocking. Don't know if data is available. @@ -132,7 +140,7 @@ public class UpgradeServletInputStream e try { return socketWrapper.read(listener == null, b, off, len); } catch (IOException ioe) { - closeRequired = true; + close(); throw ioe; } } @@ -141,14 +149,16 @@ public class UpgradeServletInputStream e @Override public void close() throws IOException { - closeRequired = true; + closed = true; } private void preReadChecks() { if (listener != null && (ready == null || !ready.booleanValue())) { - throw new IllegalStateException( - sm.getString("upgrade.sis.read.ise")); + throw new IllegalStateException(sm.getString("upgrade.sis.read.ise")); + } + if (closed) { + throw new IllegalStateException(sm.getString("upgrade.sis.read.closed")); } // No longer know if data is available ready = null; @@ -163,7 +173,7 @@ public class UpgradeServletInputStream e try { result = socketWrapper.read(listener == null, b, 0, 1); } catch (IOException ioe) { - closeRequired = true; + close(); throw ioe; } if (result == 0) { @@ -224,7 +234,7 @@ public class UpgradeServletInputStream e } - final boolean isCloseRequired() { - return closeRequired; + final boolean isClosed() { + return closed; } } Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java?rev=1661514&r1=1661513&r2=1661514&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java Sun Feb 22 18:49:22 2015 @@ -50,7 +50,7 @@ public class UpgradeServletOutputStream private volatile boolean flushing = false; - private volatile boolean closeRequired = false; + private volatile boolean closed = false; // Start in blocking-mode private volatile WriteListener listener = null; @@ -72,6 +72,9 @@ public class UpgradeServletOutputStream throw new IllegalStateException( sm.getString("upgrade.sos.canWrite.is")); } + if (closed) { + return false; + } // Make sure isReady() and onWritePossible() have a consistent view of // fireListener when determining if the listener should fire @@ -104,6 +107,9 @@ public class UpgradeServletOutputStream throw new IllegalArgumentException( sm.getString("upgrade.sos.writeListener.set")); } + if (closed) { + throw new IllegalStateException(sm.getString("upgrade.sos.write.closed")); + } // Container is responsible for first call to onWritePossible() but only // need to do this if setting the listener for the first time. synchronized (registeredLock) { @@ -120,8 +126,8 @@ public class UpgradeServletOutputStream } - final boolean isCloseRequired() { - return closeRequired; + final boolean isClosed() { + return closed; } @@ -145,6 +151,7 @@ public class UpgradeServletOutputStream @Override public void flush() throws IOException { + preWriteChecks(); flushInternal(listener == null, true); } @@ -174,7 +181,11 @@ public class UpgradeServletOutputStream @Override public void close() throws IOException { - closeRequired = true; + if (closed) { + return; + } + closed = true; + flushInternal(true, true); } @@ -182,6 +193,9 @@ public class UpgradeServletOutputStream if (listener != null && !socketWrapper.canWrite()) { throw new IllegalStateException(sm.getString("upgrade.sos.write.ise")); } + if (closed) { + throw new IllegalStateException(sm.getString("upgrade.sos.write.closed")); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org