Skip to content

NullPointerException in SessionTracker#onWebSocketSessionClosed #15184

Description

@katherine-signal

Jetty version(s)

12.1.5

Jetty Environment

ee10

HTTP version

2

Java version/vendor (use: java -version)
eclipse-temurin 25.0.2_10

OS type/version
Ubuntu 24.04

Description

This is the same service as the one in #15127. After updating to Jetty 12, we've been occasionally seeing this NullPointerException in our logs (7 in the last week and half since the update).

java.lang.NullPointerException: Cannot invoke "Object.hashCode()" because "<parameter1>" is null
	at java.base/java.util.concurrent.ConcurrentHashMap.replaceNode(Unknown Source)
	at java.base/java.util.concurrent.ConcurrentHashMap.remove(Unknown Source)
	at java.base/java.util.Collections$SetFromMap.remove(Unknown Source)
	at org.eclipse.jetty.websocket.common.SessionTracker.onWebSocketSessionClosed(SessionTracker.java:51)
	at org.eclipse.jetty.websocket.common.JettyWebSocketFrameHandler.lambda$onClosed$0(JettyWebSocketFrameHandler.java:260)
	at org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServerContainer.notifySessionListeners(JettyWebSocketServerContainer.java:272)
	at org.eclipse.jetty.websocket.common.JettyWebSocketFrameHandler.onClosed(JettyWebSocketFrameHandler.java:260)
	at org.eclipse.jetty.websocket.core.WebSocketCoreSession.lambda$closeConnection$1(WebSocketCoreSession.java:241)
	at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1691)
	at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1684)
	at org.eclipse.jetty.websocket.core.server.internal.AbstractHandshaker$1.handle(AbstractHandshaker.java:178)
	at org.eclipse.jetty.websocket.core.WebSocketCoreSession.lambda$closeConnection$0(WebSocketCoreSession.java:241)
	at org.eclipse.jetty.util.Callback$5.completed(Callback.java:259)
	at org.eclipse.jetty.util.Callback$Completing.failed(Callback.java:608)
	at org.eclipse.jetty.websocket.common.JettyWebSocketFrameHandler.onError(JettyWebSocketFrameHandler.java:252)
	at org.eclipse.jetty.websocket.core.WebSocketCoreSession.lambda$closeConnection$2(WebSocketCoreSession.java:253)
	at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1697)
	at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1684)
	at org.eclipse.jetty.websocket.core.server.internal.AbstractHandshaker$1.handle(AbstractHandshaker.java:178)
	at org.eclipse.jetty.websocket.core.WebSocketCoreSession.closeConnection(WebSocketCoreSession.java:253)
	at org.eclipse.jetty.websocket.core.WebSocketCoreSession.onEof(WebSocketCoreSession.java:223)
	at org.eclipse.jetty.websocket.core.WebSocketConnection.doOnClose(WebSocketConnection.java:265)
	at org.eclipse.jetty.websocket.core.WebSocketConnection.onClose(WebSocketConnection.java:256)
	at org.eclipse.jetty.http2.HTTP2StreamEndPoint.close(HTTP2StreamEndPoint.java:162)
	at org.eclipse.jetty.http2.server.internal.ServerHTTP2StreamEndPoint.onFailure(ServerHTTP2StreamEndPoint.java:75)
	at org.eclipse.jetty.http2.server.internal.HTTP2ServerConnection.onStreamFailure(HTTP2ServerConnection.java:225)
	at org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory$HTTPServerSessionListener.onFailure(HTTP2ServerConnectionFactory.java:180)
	at org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory$HTTPServerSessionListener.onReset(HTTP2ServerConnectionFactory.java:167)
	at org.eclipse.jetty.http2.HTTP2Stream.notifyReset(HTTP2Stream.java:928)
	at org.eclipse.jetty.http2.HTTP2Stream.onReset(HTTP2Stream.java:635)
	at org.eclipse.jetty.http2.HTTP2Stream.process(HTTP2Stream.java:374)
	at org.eclipse.jetty.http2.HTTP2Session.onReset(HTTP2Session.java:426)
	at org.eclipse.jetty.http2.HTTP2Connection.onReset(HTTP2Connection.java:284)
	at org.eclipse.jetty.http2.parser.BodyParser.notifyReset(BodyParser.java:139)
	at org.eclipse.jetty.http2.parser.ResetBodyParser.onReset(ResetBodyParser.java:94)
	at org.eclipse.jetty.http2.parser.ResetBodyParser.parse(ResetBodyParser.java:61)
	at org.eclipse.jetty.http2.parser.Parser.parseBody(Parser.java:235)
	at org.eclipse.jetty.http2.parser.Parser.parse(Parser.java:162)
	at org.eclipse.jetty.http2.parser.ServerParser.parse(ServerParser.java:121)
	at org.eclipse.jetty.http2.HTTP2Connection$HTTP2Producer.produce(HTTP2Connection.java:390)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produceTask(AdaptiveExecutionStrategy.java:509)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:251)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:196)
	at org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:237)
	at org.eclipse.jetty.http2.HTTP2Connection.onFillable(HTTP2Connection.java:165)
	at org.eclipse.jetty.http2.HTTP2Connection$FillableCallback.succeeded(HTTP2Connection.java:592)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:492)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.epcRunTask(AdaptiveExecutionStrategy.java:428)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:401)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:255)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:317)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194)
	at java.base/java.lang.Thread.run(Unknown Source)

How to reproduce?
Not sure.

Metadata

Metadata

Labels

BugFor general bugs on Jetty side

Type

No type
No fields configured for issues without a type.

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions