Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/Attic/LearningWebsocketServer.java,v diff -u -r1.1.2.1 -r1.1.2.2 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java 12 Apr 2016 12:04:02 -0000 1.1.2.1 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java 14 Apr 2016 12:34:46 -0000 1.1.2.2 @@ -170,14 +170,14 @@ // either send only to the new user or to everyone if (newWebsocket == null) { - Set sessionWebsockets = LearningWebsocketServer.websockets.get(toolSessionId); + // make a copy of the websocket collection so it does not get blocked while sending messages + Set sessionWebsockets = new HashSet( + LearningWebsocketServer.websockets.get(toolSessionId)); // synchronize websockets as a new Learner entering Scribe could modify this collection - synchronized (sessionWebsockets) { - for (Session websocket : sessionWebsockets) { - String userName = websocket.getUserPrincipal().getName(); - responseJSON.put("approved", learnersApproved.contains(userName)); - websocket.getBasicRemote().sendText(responseJSON.toString()); - } + for (Session websocket : sessionWebsockets) { + String userName = websocket.getUserPrincipal().getName(); + responseJSON.put("approved", learnersApproved.contains(userName)); + websocket.getBasicRemote().sendText(responseJSON.toString()); } } else { String userName = newWebsocket.getUserPrincipal().getName(); @@ -298,11 +298,10 @@ responseJSON.put("close", true); String response = responseJSON.toString(); - Set sessionWebsockets = LearningWebsocketServer.websockets.get(toolSessionId); - synchronized (sessionWebsockets) { - for (Session websocket : sessionWebsockets) { - websocket.getBasicRemote().sendText(response); - } + // make a copy of the websocket collection so it does not get blocked while sending messages + Set sessionWebsockets = new HashSet(LearningWebsocketServer.websockets.get(toolSessionId)); + for (Session websocket : sessionWebsockets) { + websocket.getBasicRemote().sendText(response); } }