Skip to content

CachingHttpContentFactory$CachedHttpContent already released buffer #12681

@gregw

Description

@gregw

Jetty version(s)
12.1.x

Jetty Environment
EE11

Description

Whilst developing PR #12678, I have woken up org.eclipse.jetty.servlet6.embedded.Http2Server even though there is no PushCacheFilter anymore. The intention is to convert it to early hints instead.

However, whilst running the draft Http2Server, I often get exceptions like below when serving the tiles:

2025-01-09 10:46:54.482:WARN :oejs.ResourceService:qtp100555887-48: Failed to serve resource: /tiles/tile19.jpg
java.lang.IllegalStateException: already released ReferenceCounter@650e7559[r=0]
	at org.eclipse.jetty.io.Retainable$ReferenceCounter.lambda$release$2(Retainable.java:226)
	at java.base/java.util.concurrent.atomic.AtomicInteger.updateAndGet(AtomicInteger.java:281)
	at org.eclipse.jetty.io.Retainable$ReferenceCounter.release(Retainable.java:223)
	at org.eclipse.jetty.io.Retainable$Wrapper.release(Retainable.java:149)
	at org.eclipse.jetty.io.ArrayByteBufferPool$PooledBuffer.release(ArrayByteBufferPool.java:665)
	at org.eclipse.jetty.http.content.CachingHttpContentFactory$CachedHttpContent.writeTo(CachingHttpContentFactory.java:365)
	at org.eclipse.jetty.server.ResourceService.sendData(ResourceService.java:669)
	at org.eclipse.jetty.server.ResourceService.doGet(ResourceService.java:206)
	at org.eclipse.jetty.ee11.servlet.ResourceServlet.doGet(ResourceServlet.java:545)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.eclipse.jetty.ee11.servlet.ServletHolder.handle(ServletHolder.java:736)
	at org.eclipse.jetty.ee11.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1666)
	at org.eclipse.jetty.servlet6.embedded.Http2Server$PushedTilesFilter.doFilter(Http2Server.java:153)
	at org.eclipse.jetty.ee11.servlet.FilterHolder.doFilter(FilterHolder.java:205)
	at org.eclipse.jetty.ee11.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1638)
	at org.eclipse.jetty.ee11.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1599)
	at org.eclipse.jetty.ee11.servlet.ServletChannel.dispatch(ServletChannel.java:802)
	at org.eclipse.jetty.ee11.servlet.ServletChannel.handle(ServletChannel.java:439)
	at org.eclipse.jetty.ee11.servlet.ServletHandler.handle(ServletHandler.java:469)
	at org.eclipse.jetty.ee11.servlet.SessionHandler.handle(SessionHandler.java:763)
	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1064)
	at org.eclipse.jetty.server.Server.handle(Server.java:182)
	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:673)
	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:411)
	at org.eclipse.jetty.server.internal.HttpConnection$FillableCallback.succeeded(HttpConnection.java:1688)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:979)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1209)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1164)
	at java.base/java.lang.Thread.run(Thread.java:1575)

How to reproduce?

run the Http2Server class, hit http://localhost:8080, do shift reload a few times

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions