Author: remm
Date: Thu Jan 23 14:42:21 2014
New Revision: 1560702
URL: http://svn.apache.org/r1560702
Log:
- Call onClose before actually closing anything (sending a close message closes
the endpoint).
- If onClose throws an exception, call onError.
- After using a blocking send, clear the client buffer in case it gets reused
(I have no idea why this is needed ...).
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1560702&r1=1560701&r2=1560702&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
Thu Jan 23 14:42:21 2014
@@ -234,6 +234,7 @@ public abstract class WsRemoteEndpointIm
} else {
f2sh.get(timeout, TimeUnit.MILLISECONDS);
}
+ payload.clear();
} catch (InterruptedException | ExecutionException |
TimeoutException e) {
throw new IOException(e);
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1560702&r1=1560701&r2=1560702&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Thu Jan 23
14:42:21 2014
@@ -45,6 +45,7 @@ import javax.websocket.WebSocketContaine
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.res.StringManager;
public class WsSession implements Session {
@@ -413,8 +414,8 @@ public class WsSession implements Sessio
state = State.CLOSING;
- sendCloseMessage(closeReasonMessage);
fireEndpointOnClose(closeReasonLocal);
+ sendCloseMessage(closeReasonMessage);
state = State.CLOSED;
}
@@ -436,8 +437,8 @@ public class WsSession implements Sessio
synchronized (stateLock) {
if (state == State.OPEN) {
- sendCloseMessage(closeReason);
fireEndpointOnClose(closeReason);
+ sendCloseMessage(closeReason);
state = State.CLOSED;
}
@@ -455,6 +456,9 @@ public class WsSession implements Sessio
t.setContextClassLoader(applicationClassLoader);
try {
localEndpoint.onClose(this, closeReason);
+ } catch (Throwable throwable) {
+ ExceptionUtils.handleThrowable(throwable);
+ localEndpoint.onError(this, throwable);
} finally {
t.setContextClassLoader(cl);
}
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java?rev=1560702&r1=1560701&r2=1560702&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoEndpointBase.java
Thu Jan 23 14:42:21 2014
@@ -64,14 +64,14 @@ public abstract class PojoEndpointBase e
log.error(sm.getString(
"pojoEndpointBase.onOpenFail",
pojo.getClass().getName()), e);
- handleOnOpenError(session, e);
+ handleOnOpenOrCloseError(session, e);
return;
} catch (InvocationTargetException e) {
Throwable cause = e.getCause();
- handleOnOpenError(session, cause);
+ handleOnOpenOrCloseError(session, cause);
return;
} catch (Throwable t) {
- handleOnOpenError(session, t);
+ handleOnOpenOrCloseError(session, t);
return;
}
}
@@ -83,7 +83,7 @@ public abstract class PojoEndpointBase e
}
- private void handleOnOpenError(Session session, Throwable t) {
+ private void handleOnOpenOrCloseError(Session session, Throwable t) {
// If really fatal - re-throw
ExceptionUtils.handleThrowable(t);
@@ -104,9 +104,9 @@ public abstract class PojoEndpointBase e
methodMapping.getOnClose().invoke(pojo,
methodMapping.getOnCloseArgs(pathParameters, session,
closeReason));
} catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
log.error(sm.getString("pojoEndpointBase.onCloseFail",
pojo.getClass().getName()), t);
+ handleOnOpenOrCloseError(session, t);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]