adbd: properly handle FUNCTIONFS_BIND without ENABLE.
If a device is unplugged, a BIND will happen without an ENABLE until the device is plugged in, which would previously result in adbd crashing every 5 seconds due to an attempt to join a thread that hadn't been started. Bug: http://b/128255355 Test: manually observed adbd via serial cable while unplugged Change-Id: I90d6384e7e829df1ffaf73a95f2418a2ff97fb03
This commit is contained in:
parent
fdfb9a0113
commit
007a4dc7a6
|
@ -270,29 +270,15 @@ struct UsbFfsConnection : public Connection {
|
||||||
bool started = false;
|
bool started = false;
|
||||||
bool running = true;
|
bool running = true;
|
||||||
while (running) {
|
while (running) {
|
||||||
int timeout = -1;
|
|
||||||
if (!bound || !started) {
|
|
||||||
timeout = 5000 /*ms*/;
|
|
||||||
}
|
|
||||||
|
|
||||||
adb_pollfd pfd[2] = {
|
adb_pollfd pfd[2] = {
|
||||||
{ .fd = control_fd_.get(), .events = POLLIN, .revents = 0 },
|
{ .fd = control_fd_.get(), .events = POLLIN, .revents = 0 },
|
||||||
{ .fd = monitor_event_fd_.get(), .events = POLLIN, .revents = 0 },
|
{ .fd = monitor_event_fd_.get(), .events = POLLIN, .revents = 0 },
|
||||||
};
|
};
|
||||||
int rc = TEMP_FAILURE_RETRY(adb_poll(pfd, 2, timeout));
|
int rc = TEMP_FAILURE_RETRY(adb_poll(pfd, 2, -1));
|
||||||
if (rc == -1) {
|
if (rc == -1) {
|
||||||
PLOG(FATAL) << "poll on USB control fd failed";
|
PLOG(FATAL) << "poll on USB control fd failed";
|
||||||
} else if (rc == 0) {
|
} else if (rc == 0) {
|
||||||
// Something in the kernel presumably went wrong.
|
LOG(FATAL) << "poll on USB control fd returned 0";
|
||||||
// Close our endpoints, wait for a bit, and then try again.
|
|
||||||
StopWorker();
|
|
||||||
aio_context_.reset();
|
|
||||||
read_fd_.reset();
|
|
||||||
write_fd_.reset();
|
|
||||||
control_fd_.reset();
|
|
||||||
std::this_thread::sleep_for(5s);
|
|
||||||
HandleError("didn't receive FUNCTIONFS_ENABLE, retrying");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pfd[1].revents) {
|
if (pfd[1].revents) {
|
||||||
|
|
Loading…
Reference in New Issue