You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/10/17 13:28:57 UTC
svn commit: r1533050 - in /tomcat/tc7.0.x/trunk: ./
webapps/docs/changelog.xml
webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java
webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java
Author: markt
Date: Thu Oct 17 11:28:57 2013
New Revision: 1533050
URL: http://svn.apache.org/r1533050
Log:
Use lazy init for the room in the WebSocket drawing board example.
This is primarily to avoid an issue with a hang on Java 6 in Tomcat 7 (the JSR-356 examples require Java 6) but may also help with adding multiple room support.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java
tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1533048-1533049
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1533050&r1=1533049&r2=1533050&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Oct 17 11:28:57 2013
@@ -64,6 +64,14 @@
</fix>
</changelog>
</subsection>
+ <subsection name="Web applications">
+ <changelog>
+ <fix>
+ Avoid hang observed with Java 6 on Windows when stopping the Tomcat
+ process via CTRL-C. (markt)
+ </fix>
+ </changelog>
+ </subsection>
</section>
<section name="Tomcat 7.0.46 (violetagg)" rtext="not released">
<subsection name="Catalina">
@@ -93,12 +101,6 @@
thread-safe manner. (markt)
</fix>
<fix>
- Ensure that unused input is not swallowed when keep-alive is disabled
- and the connection enters an error state. This allows the connection to
- be closed immediately rather than having to wait for the client to first
- send any remaining data that is only going to be ignored. (markt)
- </fix>
- <fix>
Update the APR/native connector to version 1.1.29. (violetagg)
</fix>
</changelog>
Modified: tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java?rev=1533050&r1=1533049&r2=1533050&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java (original)
+++ tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java Thu Oct 17 11:28:57 2013
@@ -29,6 +29,9 @@ public final class DrawboardContextListe
@Override
public void contextDestroyed(ServletContextEvent sce) {
// Shutdown our room.
- DrawboardEndpoint.getRoom().shutdown();
+ Room room = DrawboardEndpoint.getRoom(false);
+ if (room != null) {
+ room.shutdown();
+ }
}
}
Modified: tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java?rev=1533050&r1=1533049&r2=1533050&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java (original)
+++ tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java Thu Oct 17 11:28:57 2013
@@ -40,10 +40,22 @@ public final class DrawboardEndpoint ext
/**
* Our room where players can join.
*/
- private static final Room room = new Room();
+ private static volatile Room room = null;
+ private static final Object roomLock = new Object();
- public static Room getRoom() {
- return room;
+ public static Room getRoom(boolean create) {
+ if (create) {
+ if (room == null) {
+ synchronized (roomLock) {
+ if (room == null) {
+ room = new Room();
+ }
+ }
+ }
+ return room;
+ } else {
+ return room;
+ }
}
/**
@@ -72,6 +84,7 @@ public final class DrawboardEndpoint ext
session.addMessageHandler(stringHandler);
final Client client = new Client(session);
+ final Room room = getRoom(true);
room.invokeAndWait(new Runnable() {
@Override
public void run() {
@@ -100,23 +113,23 @@ public final class DrawboardEndpoint ext
@Override
public void onClose(Session session, CloseReason closeReason) {
- room.invokeAndWait(new Runnable() {
- @Override
- public void run() {
- try {
-
- // Player can be null if it couldn't enter the room
- if (player != null) {
- // Remove this player from the room.
- player.removeFromRoom();
+ Room room = getRoom(false);
+ if (room != null) {
+ room.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ // Player can be null if it couldn't enter the room
+ if (player != null) {
+ // Remove this player from the room.
+ player.removeFromRoom();
+ }
+ } catch (RuntimeException ex) {
+ log.error("Unexpected exception: " + ex.toString(), ex);
}
-
- } catch (RuntimeException ex) {
- log.error("Unexpected exception: " + ex.toString(), ex);
}
- }
- });
-
+ });
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org