Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java =================================================================== diff -u -re1312708b95d2a0343c95cadbf03432d65c7657c -r4073aa3fa544dd4862cb705704a0d3dc8ef19e6a --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision e1312708b95d2a0343c95cadbf03432d65c7657c) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 4073aa3fa544dd4862cb705704a0d3dc8ef19e6a) @@ -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); } }