Hi,
Daemon Thread [http-nio-8080-exec-4] (Suspended (breakpoint at line 84
in EditorEndpoint))
owns: Object (id=16796)
owns: NioEndpoint$NioSocketWrapper (id=16797)
EditorEndpoint.onError(Throwable) line: 84
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line:
not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object...) line: 567
PojoEndpointServer(PojoEndpointBase).onError(Session, Throwable) line: 133
WsSession.sendCloseMessage(CloseReason) line: 619
WsSession.onClose(CloseReason) line: 526
WsFrameServer(WsFrameBase).processDataControl() line: 348
WsFrameServer(WsFrameBase).processData() line: 290
WsFrameServer(WsFrameBase).processInputBuffer() line: 130
WsFrameServer.onDataAvailable() line: 70
WsHttpUpgradeHandler.upgradeDispatch(SocketEvent) line: 148
UpgradeProcessorInternal.dispatch(SocketEvent) line: 54
UpgradeProcessorInternal(AbstractProcessorLight).process(SocketWrapperBase<?>,
SocketEvent) line: 53
AbstractProtocol$ConnectionHandler<S>.process(SocketWrapperBase<S>,
SocketEvent) line: 789
NioEndpoint$SocketProcessor.doRun() line: 1437
NioEndpoint$SocketProcessor(SocketProcessorBase<S>).run() line: 49
ThreadPoolExecutor(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker)
line: 1128
ThreadPoolExecutor$Worker.run() line: 628
TaskThread$WrappingRunnable.run() line: 61
TaskThread(Thread).run() line: 835
That is a stack that we encounter which i find quite strange
it seems to me that WsFrameBase.processDataControl
does a wsSession.onClose(new CloseReason(Util.getCloseCode(code), reason));
when it gets an op_code close
that sounds reasonably but the problem is WsSession will call when it was
in a open state an sendCloseMessage:
if (state == State.OPEN) { state = State.OUTPUT_CLOSED;
sendCloseMessage(closeReason);
problem is it is closed so this will result in a exception (broken pipe
stuff) when that is called
As far as i can understand it should not try to send a close message at
that point, because the close did already happen from the client side..
I guess if onclose was called programatically from the server side then it
is logical.
--
Johan Compagner
Servoy