If last write completes after read side is closed, we won't post a onWriteCompleted call to the executor, because we do an early return when maybeSucceedLocked() is true.
Should we not do early return here?
CronetBidirectionalStream.java:
private final class OnWriteCompletedRunnable implements Runnable {
// Buffer passed back from current invocation of onWriteCompleted.
ByteBuffer mByteBuffer;
// End of stream flag from current call to write.
boolean mEndOfStream;
@Override
public void run() {
try {
// Null out mByteBuffer, to pass buffer ownership to callback or release if done.
ByteBuffer buffer = mByteBuffer;
mByteBuffer = null;
synchronized (mNativeStreamLock) {
if (isDoneLocked()) {
return;
}
if (mEndOfStream) {
mWriteState = State.WRITING_DONE;
if (maybeSucceedLocked()) {
return;
}
} else {
mWriteState = State.WAITING_FOR_WRITE;
}
}
mCallback.onWriteCompleted(CronetBidirectionalStream.this, mResponseInfo, buffer);
} catch (Exception e) {
onCallbackException(e);
}
}
}
Comment 1 by xunji...@chromium.org
, Apr 26 2016Status: Started (was: Untriaged)