Skip to content

Commit d21fe32

Browse files
authoredMar 29, 2024··
okhttp: Remove finished stream even if a pending stream was started
Fixes #11053
1 parent 097a46b commit d21fe32

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed
 

‎okhttp/src/main/java/io/grpc/okhttp/OkHttpClientTransport.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -953,8 +953,8 @@ void finishStream(
953953
}
954954
if (!startPendingStreams()) {
955955
stopIfNecessary();
956-
maybeClearInUse(stream);
957956
}
957+
maybeClearInUse(stream);
958958
}
959959
}
960960
}

‎okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java

+20
Original file line numberDiff line numberDiff line change
@@ -2080,6 +2080,26 @@ public void shutdownNow_streamListenerRpcProgress() throws Exception {
20802080
assertEquals(MISCARRIED, listener3.rpcProgress);
20812081
}
20822082

2083+
@Test
2084+
public void finishedStreamRemovedFromInUseState() throws Exception {
2085+
initTransport();
2086+
setMaxConcurrentStreams(1);
2087+
final MockStreamListener listener = new MockStreamListener();
2088+
OkHttpClientStream stream =
2089+
clientTransport.newStream(method, new Metadata(), CallOptions.DEFAULT, tracers);
2090+
stream.start(listener);
2091+
OkHttpClientStream pendingStream =
2092+
clientTransport.newStream(method, new Metadata(), CallOptions.DEFAULT, tracers);
2093+
pendingStream.start(listener);
2094+
waitForStreamPending(1);
2095+
clientTransport.finishStream(stream.transportState().id(), Status.OK, PROCESSED,
2096+
false, null, null);
2097+
verify(transportListener).transportInUse(true);
2098+
clientTransport.finishStream(pendingStream.transportState().id(), Status.OK, PROCESSED,
2099+
false, null, null);
2100+
verify(transportListener).transportInUse(false);
2101+
}
2102+
20832103
private int activeStreamCount() {
20842104
return clientTransport.getActiveStreams().length;
20852105
}

0 commit comments

Comments
 (0)
Please sign in to comment.