There is a race between test thread and test callback invoked on the network thread.
The test has a loop:
do {
buffer = Cronet_Buffer_Create();
Cronet_Buffer_InitWithAlloc(buffer, 100);
Cronet_UrlRequest_Read(request, buffer);
// Verify that late calls to GetStatus() don't invoke OnStatus() after
// final callbacks.
GetRequestStatus(request, &test_callback);
test_callback.WaitForNextStep();
} while (!test_callback.IsDone());
That is gated on test callback getting invoked and response being done.
The problem is that OnSucceeded callback first signals that next step can proceed (from MaybeCancelOrPause()) and afterwards signals done:
MaybeCancelOrPause(request);
SignalDone();
If test thread checks test_callback.IsDone() before OnSucceeded() signals it, then loop continues and calls Cronet_UrlRequest_Read() which signals Cronet_RESULT_ILLEGAL_STATE_UNEXPECTED_READ.
Comment 1 by mef@chromium.org
, Jan 14