Skip to content

Commit 285e8d5

Browse files
committed
Fixed data race in GrpcProxyServer
1 parent a1a12f7 commit 285e8d5

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

tests/common/src/main/java/tech/ydb/test/integration/docker/GrpcProxyServer.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ public void close() {
7171
}
7272

7373
private static class CallProxy<ReqT, RespT> {
74+
private final Lock clientCallLock = new ReentrantLock();
75+
private final Lock serverCallLock = new ReentrantLock();
76+
7477
final RequestProxy serverCallListener;
7578
final ResponseProxy clientCallListener;
7679

@@ -80,7 +83,6 @@ private static class CallProxy<ReqT, RespT> {
8083
}
8184

8285
private class RequestProxy extends ServerCall.Listener<ReqT> {
83-
private final Lock clientCallLock = new ReentrantLock();
8486
private final ClientCall<ReqT, ?> clientCall;
8587
// Hold 'this' lock when accessing
8688
private boolean needToRequest;
@@ -101,8 +103,8 @@ public void onHalfClose() {
101103

102104
@Override
103105
public void onMessage(ReqT message) {
104-
clientCall.sendMessage(message);
105106
clientCallLock.lock();
107+
clientCall.sendMessage(message);
106108
try {
107109
if (clientCall.isReady()) {
108110
clientCallListener.serverCall.request(1);
@@ -137,7 +139,6 @@ void onClientReady() {
137139
}
138140

139141
private class ResponseProxy extends ClientCall.Listener<RespT> {
140-
private final Lock serverCallLock = new ReentrantLock();
141142
private final ServerCall<?, RespT> serverCall;
142143
// Hold 'this' lock when accessing
143144
private boolean needToRequest;
@@ -158,8 +159,8 @@ public void onHeaders(Metadata headers) {
158159

159160
@Override
160161
public void onMessage(RespT message) {
161-
serverCall.sendMessage(message);
162162
serverCallLock.lock();
163+
serverCall.sendMessage(message);
163164
try {
164165
if (serverCall.isReady()) {
165166
serverCallListener.clientCall.request(1);

0 commit comments

Comments
 (0)