diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java index 23a94507d7..2acc1c49db 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/PartGenerator.java @@ -209,6 +209,7 @@ final class PartGenerator extends BaseSubscriber { void requestToken() { if (upstream() != null && + this.state.get().canRequest() && this.requestOutstanding.compareAndSet(false, true)) { request(1); } @@ -252,6 +253,13 @@ final class PartGenerator extends BaseSubscriber { default void error(Throwable throwable) { } + /** + * Indicates whether the current state is ready to accept a new token. + */ + default boolean canRequest() { + return true; + } + /** * Cleans up any state. */ @@ -755,6 +763,11 @@ final class PartGenerator extends BaseSubscriber { } } + @Override + public boolean canRequest() { + return false; + } + @Override public void dispose() { this.disposed = true;