Index: web/web-core/src/main/java/org/apache/catalina/connector/AsyncContextImpl.java =================================================================== --- web/web-core/src/main/java/org/apache/catalina/connector/AsyncContextImpl.java (revision 52768) +++ web/web-core/src/main/java/org/apache/catalina/connector/AsyncContextImpl.java (working copy) @@ -399,41 +399,42 @@ * Notifies all AsyncListeners of the given async event type */ void notifyAsyncListeners(AsyncEventType asyncEventType, Throwable t) { + LinkedList clone; synchronized(asyncListenerContexts) { if (asyncListenerContexts.isEmpty()) { return; } - LinkedList clone = + clone = (LinkedList) asyncListenerContexts.clone(); if (asyncEventType.equals(AsyncEventType.START_ASYNC)) { asyncListenerContexts.clear(); } - for (AsyncListenerContext asyncListenerContext : clone) { - AsyncListener asyncListener = - asyncListenerContext.getAsyncListener(); - AsyncEvent asyncEvent = new AsyncEvent( - this, asyncListenerContext.getRequest(), - asyncListenerContext.getResponse(), t); - try { - switch (asyncEventType) { - case COMPLETE: - asyncListener.onComplete(asyncEvent); - break; - case TIMEOUT: - asyncListener.onTimeout(asyncEvent); - break; - case ERROR: - asyncListener.onError(asyncEvent); - break; - case START_ASYNC: - asyncListener.onStartAsync(asyncEvent); - break; - } - } catch (IOException ioe) { - log.log(Level.WARNING, "Error invoking AsyncListener", - ioe); + } + for (AsyncListenerContext asyncListenerContext : clone) { + AsyncListener asyncListener = + asyncListenerContext.getAsyncListener(); + AsyncEvent asyncEvent = new AsyncEvent( + this, asyncListenerContext.getRequest(), + asyncListenerContext.getResponse(), t); + try { + switch (asyncEventType) { + case COMPLETE: + asyncListener.onComplete(asyncEvent); + break; + case TIMEOUT: + asyncListener.onTimeout(asyncEvent); + break; + case ERROR: + asyncListener.onError(asyncEvent); + break; + case START_ASYNC: + asyncListener.onStartAsync(asyncEvent); + break; } + } catch (IOException ioe) { + log.log(Level.WARNING, "Error invoking AsyncListener", + ioe); } } }