Skip to content

Commit 02fd46c

Browse files
authored
Merge pull request #570 from alex268/master
Fixed data race in session pool
2 parents 7714c5d + b49c292 commit 02fd46c

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

table/src/main/java/tech/ydb/table/impl/pool/WaitingQueue.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
import java.util.Iterator;
44
import java.util.Map;
5-
import java.util.Queue;
65
import java.util.concurrent.CancellationException;
76
import java.util.concurrent.CompletableFuture;
87
import java.util.concurrent.ConcurrentHashMap;
98
import java.util.concurrent.ConcurrentLinkedDeque;
10-
import java.util.concurrent.ConcurrentLinkedQueue;
119
import java.util.concurrent.atomic.AtomicInteger;
1210
import java.util.function.BiConsumer;
1311

@@ -55,7 +53,7 @@ public interface Handler<T> {
5553
private final AtomicInteger queueSize = new AtomicInteger();
5654

5755
/** Queue of waiting acquire requests */
58-
private final Queue<CompletableFuture<T>> waitingAcquires = new ConcurrentLinkedQueue<>();
56+
private final ConcurrentLinkedDeque<CompletableFuture<T>> waitingAcquires = new ConcurrentLinkedDeque<>();
5957
/** Size of waiting acquires queue */
6058
private final AtomicInteger waitingAcqueireCount = new AtomicInteger();
6159

@@ -271,16 +269,18 @@ private void checkNextWaitingAcquire() {
271269
return;
272270
}
273271

274-
CompletableFuture<T> next = waitingAcquires.peek();
272+
CompletableFuture<T> next = waitingAcquires.poll();
275273
while (next != null && next.isDone()) {
276-
waitingAcquires.remove();
277274
waitingAcqueireCount.decrementAndGet();
278-
next = waitingAcquires.peek();
275+
next = waitingAcquires.poll();
279276
}
280277

281-
if (next != null && tryToCreateNewPending(next)) {
282-
waitingAcquires.remove();
283-
waitingAcqueireCount.decrementAndGet();
278+
if (next != null) {
279+
if (tryToCreateNewPending(next)) {
280+
waitingAcqueireCount.decrementAndGet();
281+
} else {
282+
waitingAcquires.offerFirst(next);
283+
}
284284
}
285285
}
286286

0 commit comments

Comments
 (0)