From 42f60fe4903dd9634a6946e5f57134488bbadc56 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 1 May 2020 17:05:02 +0100 Subject: [PATCH] Fix race condition in WriteResultPublisher Backport of c35b3e5c822d9ffc57893393603866468ce24c80 Closes gh-24989 --- .../http/server/reactive/WriteResultPublisher.java | 6 ++++++ 1 file changed, 6 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..523050a37a8f 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,9 @@ void subscribe(WriteResultPublisher publisher, Subscriber subscrib @Override void publishComplete(WriteResultPublisher publisher) { publisher.completedBeforeSubscribed = true; + if(State.SUBSCRIBED.equals(publisher.state.get())) { + publisher.state.get().publishComplete(publisher); + } } @Override void publishError(WriteResultPublisher publisher, Throwable ex) { @@ -190,6 +193,9 @@ void request(WriteResultPublisher publisher, long n) { @Override void publishComplete(WriteResultPublisher publisher) { publisher.completedBeforeSubscribed = true; + if(State.SUBSCRIBED.equals(publisher.state.get())) { + publisher.state.get().publishComplete(publisher); + } } @Override void publishError(WriteResultPublisher publisher, Throwable ex) {