Browse Source

Merge branch '6.0.x'

Closes gh-13145
pull/13178/head
Josh Cummings 3 years ago
parent
commit
cdcc2d31d1
No known key found for this signature in database
GPG Key ID: A306A51F43B8E5A5
  1. 34
      web/src/main/java/org/springframework/security/web/server/ObservationWebFilterChainDecorator.java

34
web/src/main/java/org/springframework/security/web/server/ObservationWebFilterChainDecorator.java

@ -21,6 +21,8 @@ import java.util.List; @@ -21,6 +21,8 @@ import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import io.micrometer.common.KeyValue;
import io.micrometer.common.KeyValues;
@ -382,6 +384,8 @@ public final class ObservationWebFilterChainDecorator implements WebFilterChainP @@ -382,6 +384,8 @@ public final class ObservationWebFilterChainDecorator implements WebFilterChainP
private static final ObservationReference NOOP = new ObservationReference(Observation.NOOP);
private final Lock lock = new ReentrantLock();
private final AtomicInteger state = new AtomicInteger(0);
private final Observation observation;
@ -391,20 +395,38 @@ public final class ObservationWebFilterChainDecorator implements WebFilterChainP @@ -391,20 +395,38 @@ public final class ObservationWebFilterChainDecorator implements WebFilterChainP
}
private void start() {
if (this.state.compareAndSet(0, 1)) {
this.observation.start();
try {
this.lock.lock();
if (this.state.compareAndSet(0, 1)) {
this.observation.start();
}
}
finally {
this.lock.unlock();
}
}
private void error(Throwable ex) {
if (this.state.get() == 1) {
this.observation.error(ex);
try {
this.lock.lock();
if (this.state.get() == 1) {
this.observation.error(ex);
}
}
finally {
this.lock.unlock();
}
}
private void stop() {
if (this.state.compareAndSet(1, 2)) {
this.observation.stop();
try {
this.lock.lock();
if (this.state.compareAndSet(1, 2)) {
this.observation.stop();
}
}
finally {
this.lock.unlock();
}
}

Loading…
Cancel
Save