OkHttp: Fix race condition between sendCancel and sendFrame

This commit is contained in:
Xudong Ma 2015-08-27 14:35:35 -07:00
parent 080190c753
commit a3f2f6249e
2 changed files with 5 additions and 2 deletions

View File

@ -190,11 +190,14 @@ class OkHttpClientStream extends Http2ClientStream {
}
synchronized (lock) {
if (cancelSent) {
return;
}
if (pendingData != null) {
// Stream is pending start, queue the data.
pendingData.add(new PendingData(buffer, endOfStream, flush));
} else {
checkState(id() != 0, "streamId should be set");
checkState(id() != null, "streamId should be set");
// If buffer > frameWriter.maxDataLength() the flow-controller will ensure that it is
// properly chunked.
outboundFlow.data(endOfStream, id(), buffer, flush);

View File

@ -197,7 +197,7 @@ public class OkHttpClientTransportTest {
startTransport(3, null, true, 1);
MockStreamListener listener = new MockStreamListener();
clientTransport.newStream(method, new Metadata.Headers(), listener).request(1);
clientTransport.newStream(method, new Metadata(), listener).request(1);
assertContainStream(3);
frameHandler().headers(false, false, 3, 0, grpcResponseHeaders(), HeadersMode.HTTP_20_HEADERS);
assertNotNull(listener.headers);