From 56ba39e168d1f1730aedaf47d5d9f291d50a6167 Mon Sep 17 00:00:00 2001 From: Daniel Allen Date: Tue, 28 Apr 2020 10:23:06 -0700 Subject: [PATCH] Fix race condition with publishComplete --- .../http/server/reactive/WriteResultPublisher.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/WriteResultPublisher.java b/spring-web/src/main/java/org/springframework/http/server/reactive/WriteResultPublisher.java index 5636a9faa0fd..fa1c3ad35438 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/WriteResultPublisher.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/WriteResultPublisher.java @@ -175,6 +175,10 @@ void subscribe(WriteResultPublisher publisher, Subscriber subscrib @Override void publishComplete(WriteResultPublisher publisher) { publisher.completedBeforeSubscribed = true; + // May have already passed the SUBSCRIBED's state's completedBeforeSubscribed check.. + if(State.SUBSCRIBED.equals(publisher.state.get())) { + publisher.state.get().publishComplete(publisher); + } } @Override void publishError(WriteResultPublisher publisher, Throwable ex) { @@ -190,6 +194,10 @@ void request(WriteResultPublisher publisher, long n) { @Override void publishComplete(WriteResultPublisher publisher) { publisher.completedBeforeSubscribed = true; + // May have already passed the SUBSCRIBED's state's completedBeforeSubscribed check.. + if(State.SUBSCRIBED.equals(publisher.state.get())) { + publisher.state.get().publishComplete(publisher); + } } @Override void publishError(WriteResultPublisher publisher, Throwable ex) {