Skip to content

Commit ba57ee8

Browse files
committed
GH-9623: Fix ThreadStatePropagationChannelInterceptor for concurrency
Fixes: #9623 Issue link: #9623 The `ConcurrentModificationException` is thrown from the `ThreadStatePropagationChannelInterceptor.MessageWithThreadState.stateQueue` which is a not thread-safe `LinkedList` * Fix `ThreadStatePropagationChannelInterceptor.MessageWithThreadState.stateQueue` to be a `LinkedBlockingQueue` instead **Auto-cherry-pick to `6.3.x` & `6.2.x`**
1 parent 0d2595e commit ba57ee8

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

spring-integration-core/src/main/java/org/springframework/integration/channel/interceptor/ThreadStatePropagationChannelInterceptor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
package org.springframework.integration.channel.interceptor;
1818

19-
import java.util.LinkedList;
2019
import java.util.Queue;
20+
import java.util.concurrent.LinkedBlockingQueue;
2121

2222
import io.micrometer.common.lang.Nullable;
2323

@@ -104,14 +104,14 @@ private static final class MessageWithThreadState implements Message<Object>, Me
104104
private final Queue<Object> stateQueue;
105105

106106
MessageWithThreadState(Message<?> message, Object state) {
107-
this(message, new LinkedList<>());
107+
this(message, new LinkedBlockingQueue<>());
108108
this.stateQueue.add(state);
109109
}
110110

111111
@SuppressWarnings("unchecked")
112112
private MessageWithThreadState(Message<?> message, Queue<Object> stateQueue) {
113113
this.message = (Message<Object>) message;
114-
this.stateQueue = new LinkedList<>(stateQueue);
114+
this.stateQueue = new LinkedBlockingQueue<>(stateQueue);
115115
}
116116

117117
@Override

0 commit comments

Comments
 (0)