diff --git a/modules/cpr/src/main/java/org/atmosphere/websocket/DefaultWebSocketProcessor.java b/modules/cpr/src/main/java/org/atmosphere/websocket/DefaultWebSocketProcessor.java index eb68dcb7ad4..bab0d728181 100644 --- a/modules/cpr/src/main/java/org/atmosphere/websocket/DefaultWebSocketProcessor.java +++ b/modules/cpr/src/main/java/org/atmosphere/websocket/DefaultWebSocketProcessor.java @@ -447,23 +447,27 @@ public void close(WebSocket webSocket, int closeCode) { webSocketHandler.onClose(webSocket); } - AsynchronousProcessor.AsynchronousProcessorHook h = (AsynchronousProcessor.AsynchronousProcessorHook) - r.getAttribute(ASYNCHRONOUS_HOOK); - if (!resource.isCancelled() && h != null) { - if (closeCode == 1005) { - h.closed(); - } else { - h.timedOut(); - } + Object o = r.getAttribute(ASYNCHRONOUS_HOOK); + AsynchronousProcessor.AsynchronousProcessorHook h; + if (o != null && AsynchronousProcessor.class.isAssignableFrom(o.getClass())) { + h = (AsynchronousProcessor.AsynchronousProcessorHook) + r.getAttribute(ASYNCHRONOUS_HOOK); + if (!resource.isCancelled()) { + if (closeCode == 1005) { + h.closed(); + } else { + h.timedOut(); + } - resource.setIsInScope(false); - try { - resource.cancel(); - } catch (IOException e) { - logger.trace("", e); + resource.setIsInScope(false); + try { + resource.cancel(); + } catch (IOException e) { + logger.trace("", e); + } } + AtmosphereResourceImpl.class.cast(resource)._destroy(); } - AtmosphereResourceImpl.class.cast(resource)._destroy(); } } finally {