adbd: increment writes_submitted_ before submitting writes.

If we fail to submit writes for some reason (e.g. the USB cable was
unplugged), another thread that's waiting on the write mutex can enter
SubmitWrites and attempt to resubmit the writes that we already failed
to submit, leading to a failed assertion of !IoBlock::pending.

Increment writes_submitted_ before actually calling io_submit, so we
skip over these writes and fall through to exit.

Bug: http://b/129134256
Test: manually unplugged a blueline
Change-Id: I2fd0034e45db22c8f637c81039ce686b7aa6a03b
This commit is contained in:
Josh Gao 2019-03-26 13:06:38 -07:00
parent 8a5a918ef8
commit 63b52ec13b

View file

@ -552,6 +552,8 @@ struct UsbFfsConnection : public Connection {
LOG(VERBOSE) << "submitting write_request " << static_cast<void*>(iocbs[i]);
}
writes_submitted_ += writes_to_submit;
int rc = io_submit(aio_context_.get(), writes_to_submit, iocbs);
if (rc == -1) {
HandleError(StringPrintf("failed to submit write requests: %s", strerror(errno)));
@ -560,8 +562,6 @@ struct UsbFfsConnection : public Connection {
LOG(FATAL) << "failed to submit all writes: wanted to submit " << writes_to_submit
<< ", actually submitted " << rc;
}
writes_submitted_ += rc;
}
void HandleError(const std::string& error) {