Browse Source

Double-checked lock in ChannelSendOperator#request

Closes gh-31865
pull/32173/head
rstoyanchev 2 years ago
parent
commit
fd240b3b86
  1. 4
      spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/ChannelSendOperator.java
  2. 4
      spring-web/src/main/java/org/springframework/http/server/reactive/ChannelSendOperator.java

4
spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/ChannelSendOperator.java

@ -281,6 +281,10 @@ class ChannelSendOperator<T> extends Mono<Void> implements Scannable { @@ -281,6 +281,10 @@ class ChannelSendOperator<T> extends Mono<Void> implements Scannable {
return;
}
synchronized (this) {
if (this.state == State.READY_TO_WRITE) {
s.request(n);
return;
}
if (this.writeSubscriber != null) {
if (this.state == State.EMITTING_CACHED_SIGNALS) {
this.demandBeforeReadyToWrite = n;

4
spring-web/src/main/java/org/springframework/http/server/reactive/ChannelSendOperator.java

@ -273,6 +273,10 @@ public class ChannelSendOperator<T> extends Mono<Void> implements Scannable { @@ -273,6 +273,10 @@ public class ChannelSendOperator<T> extends Mono<Void> implements Scannable {
return;
}
synchronized (this) {
if (this.state == State.READY_TO_WRITE) {
s.request(n);
return;
}
if (this.writeSubscriber != null) {
if (this.state == State.EMITTING_CACHED_SIGNALS) {
this.demandBeforeReadyToWrite = n;

Loading…
Cancel
Save