From 6c15ab43755f870ad1803bb397771e07a4d6fd0c Mon Sep 17 00:00:00 2001 From: jfarcand Date: Mon, 25 Mar 2013 13:25:19 -0400 Subject: [PATCH] Fix for #974 --- .../java/org/atmosphere/cpr/DefaultBroadcaster.java | 11 +++++++---- samples/chat/src/main/webapp/WEB-INF/web.xml | 10 +++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/modules/cpr/src/main/java/org/atmosphere/cpr/DefaultBroadcaster.java b/modules/cpr/src/main/java/org/atmosphere/cpr/DefaultBroadcaster.java index f7cb36141f5..88471481e4d 100644 --- a/modules/cpr/src/main/java/org/atmosphere/cpr/DefaultBroadcaster.java +++ b/modules/cpr/src/main/java/org/atmosphere/cpr/DefaultBroadcaster.java @@ -550,9 +550,10 @@ public String toString() { } protected Runnable getBroadcastHandler() { + final AtomicBoolean init = new AtomicBoolean(true); return new Runnable() { public void run() { - while (!isDestroyed() && !outOfOrderBroadcastSupported.get()) { + while (init.getAndSet(false) || (!isDestroyed() && !outOfOrderBroadcastSupported.get())) { Entry msg = null; try { msg = messages.poll(waitTime, TimeUnit.MILLISECONDS); @@ -566,6 +567,7 @@ public void run() { return; } finally { if (outOfOrderBroadcastSupported.get()) { + init.set(true); bc.getExecutorService().submit(this); } } @@ -588,9 +590,10 @@ public void run() { } protected Runnable getAsyncWriteHandler(final WriteQueue writeQueue) { + final AtomicBoolean init = new AtomicBoolean(true); return new Runnable() { public void run() { - while (!isDestroyed() && !outOfOrderBroadcastSupported.get()) { + while (init.getAndSet(false) || (!isDestroyed() && !outOfOrderBroadcastSupported.get())) { AsyncWriteToken token = null; try { token = writeQueue.queue.poll(waitTime, TimeUnit.MILLISECONDS); @@ -608,9 +611,9 @@ public void run() { logger.trace("", ex); return; } finally { - if (!bc.getAsyncWriteService().isShutdown() && token == null && outOfOrderBroadcastSupported.get()) { + if (!bc.getAsyncWriteService().isShutdown() && outOfOrderBroadcastSupported.get()) { + init.set(true); bc.getAsyncWriteService().submit(this); - return; } } diff --git a/samples/chat/src/main/webapp/WEB-INF/web.xml b/samples/chat/src/main/webapp/WEB-INF/web.xml index 4c3996a001b..70fec8f2675 100644 --- a/samples/chat/src/main/webapp/WEB-INF/web.xml +++ b/samples/chat/src/main/webapp/WEB-INF/web.xml @@ -1,8 +1,8 @@ + xmlns:j2ee="http://java.sun.com/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2.5.xsd"> Atmosphere Chat Atmosphere Chat @@ -12,6 +12,10 @@ org.atmosphere.cpr.AtmosphereServlet true 0 + + org.atmosphere.cpr.Broadcaster.supportOutOfOrderBroadcast + true + AtmosphereServlet