diff --git a/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/MessageFlusher.java b/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/MessageFlusher.java index a1192c02a3a9..f450bfaf0ec2 100644 --- a/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/MessageFlusher.java +++ b/jetty-core/jetty-http3/jetty-http3-common/src/main/java/org/eclipse/jetty/http3/MessageFlusher.java @@ -75,7 +75,7 @@ protected Action process() return Action.SCHEDULED; } - int generated = generator.generate(accumulator, entry.endPoint.getStreamId(), frame, this::failed); + int generated = generator.generate(accumulator, entry.endPoint.getStreamId(), frame, this::onGenerateFailure); if (generated < 0) return Action.SCHEDULED; @@ -88,35 +88,48 @@ protected Action process() return Action.SCHEDULED; } - // TODO this should be onSuccess() - @Override - public void succeeded() + private void onGenerateFailure(Throwable cause) { if (LOG.isDebugEnabled()) - LOG.debug("succeeded to write {} on {}", entry, this); + LOG.debug("failed to generate {} on {}", entry, this, cause); accumulator.release(); - entry.callback.succeeded(); + entry.callback.failed(cause); entry = null; - super.succeeded(); + // Continue the iteration. + succeeded(); } @Override - public void failed(Throwable x) + protected void onSuccess() { if (LOG.isDebugEnabled()) - LOG.debug("failed to write {} on {}", entry, this, x); + LOG.debug("succeeded to write {} on {}", entry, this); accumulator.release(); - entry.callback.failed(x); - entry = null; + if (entry != null) + { + entry.callback.succeeded(); + entry = null; + } + } - // Continue the iteration. - // TODO this is pure evil! - super.succeeded(); + @Override + protected void onCompleteFailure(Throwable cause) + { + if (LOG.isDebugEnabled()) + LOG.debug("failed to write {} on {}", entry, this, cause); + + accumulator.release(); + + if (entry != null) + { + entry.callback.failed(cause); + entry = null; + } } @Override diff --git a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/IteratingCallback.java b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/IteratingCallback.java index 76d3bff375c0..6fc58187dbb7 100644 --- a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/IteratingCallback.java +++ b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/IteratingCallback.java @@ -356,7 +356,7 @@ else if (notifyCompleteFailure != null) * to call {@code super.succeeded()}. */ @Override - public void succeeded() + public final void succeeded() { boolean process = false; try (AutoLock ignored = _lock.lock()) @@ -409,7 +409,7 @@ public void succeeded() * @see #isFailed() */ @Override - public void failed(Throwable x) + public final void failed(Throwable x) { boolean failure = false; try (AutoLock ignored = _lock.lock())