Skip to content

Commit

Permalink
More fix for #170 [long-polling] Message losts during concurrent susp…
Browse files Browse the repository at this point in the history
…end/broadcast
  • Loading branch information
jfarcand committed Feb 2, 2012
1 parent 01a1988 commit d0cca9c
Showing 1 changed file with 15 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -641,27 +641,28 @@ protected Object perRequestFilter(AtmosphereResource<?, ?> r, Entry msg) {
Object finalMsg = msg.message;

if (AtmosphereResourceImpl.class.isAssignableFrom(r.getClass())) {
if (AtmosphereResourceImpl.class.cast(r).isInScope()) {
if (r.getRequest() instanceof HttpServletRequest && bc.hasPerRequestFilters()) {
Object message = msg.originalMessage;
BroadcastAction a = bc.filter((HttpServletRequest) r.getRequest(), (HttpServletResponse) r.getResponse(), message);
if (a.action() == BroadcastAction.ACTION.ABORT) {
return null;
}
if (a.message() != msg.originalMessage) {
finalMsg = a.message();
synchronized(r) {
if (AtmosphereResourceImpl.class.cast(r).isInScope()) {
if (r.getRequest() instanceof HttpServletRequest && bc.hasPerRequestFilters()) {
Object message = msg.originalMessage;
BroadcastAction a = bc.filter((HttpServletRequest) r.getRequest(), (HttpServletResponse) r.getResponse(), message);
if (a.action() == BroadcastAction.ACTION.ABORT) {
return null;
}
if (a.message() != msg.originalMessage) {
finalMsg = a.message();
}
}
} else {
// The resource is no longer valid.
removeAtmosphereResource(r);
BroadcasterFactory.getDefault().removeAllAtmosphereResource(r);
}

if (cacheStrategy == BroadcasterCache.STRATEGY.AFTER_FILTER) {
trackBroadcastMessage(r, finalMsg);
}
} else {
// The resource is no longer valid.
removeAtmosphereResource(r);
BroadcasterFactory.getDefault().removeAllAtmosphereResource(r);
}

}
return finalMsg;
}
Expand Down

0 comments on commit d0cca9c

Please sign in to comment.