Loading adb/daemon/usb.cpp +23 −7 Original line number Diff line number Diff line Loading @@ -267,7 +267,7 @@ struct UsbFfsConnection : public Connection { adb_thread_setname("UsbFfs-monitor"); bool bound = false; bool started = false; bool enabled = false; bool running = true; while (running) { adb_pollfd pfd[2] = { Loading Loading @@ -298,16 +298,32 @@ struct UsbFfsConnection : public Connection { switch (event.type) { case FUNCTIONFS_BIND: CHECK(!bound) << "received FUNCTIONFS_BIND while already bound?"; CHECK(!enabled) << "received FUNCTIONFS_BIND while already enabled?"; bound = true; break; case FUNCTIONFS_ENABLE: CHECK(!started) << "received FUNCTIONFS_ENABLE while already running?"; started = true; CHECK(bound) << "received FUNCTIONFS_ENABLE while not bound?"; CHECK(!enabled) << "received FUNCTIONFS_ENABLE while already enabled?"; enabled = true; StartWorker(); break; case FUNCTIONFS_DISABLE: CHECK(bound) << "received FUNCTIONFS_DISABLE while not bound?"; CHECK(enabled) << "received FUNCTIONFS_DISABLE while not enabled?"; enabled = false; running = false; break; case FUNCTIONFS_UNBIND: CHECK(!enabled) << "received FUNCTIONFS_UNBIND while still enabled?"; CHECK(bound) << "received FUNCTIONFS_UNBIND when not bound?"; bound = false; running = false; break; } Loading Loading @@ -339,7 +355,7 @@ struct UsbFfsConnection : public Connection { LOG(FATAL) << "hit EOF on eventfd"; } WaitForEvents(); ReadEvents(); } }); } Loading Loading @@ -389,7 +405,7 @@ struct UsbFfsConnection : public Connection { return block; } void WaitForEvents() { void ReadEvents() { static constexpr size_t kMaxEvents = kUsbReadQueueDepth + kUsbWriteQueueDepth; struct io_event events[kMaxEvents]; struct timespec timeout = {.tv_sec = 0, .tv_nsec = 0}; Loading Loading @@ -552,6 +568,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))); Loading @@ -560,8 +578,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) { Loading Loading
adb/daemon/usb.cpp +23 −7 Original line number Diff line number Diff line Loading @@ -267,7 +267,7 @@ struct UsbFfsConnection : public Connection { adb_thread_setname("UsbFfs-monitor"); bool bound = false; bool started = false; bool enabled = false; bool running = true; while (running) { adb_pollfd pfd[2] = { Loading Loading @@ -298,16 +298,32 @@ struct UsbFfsConnection : public Connection { switch (event.type) { case FUNCTIONFS_BIND: CHECK(!bound) << "received FUNCTIONFS_BIND while already bound?"; CHECK(!enabled) << "received FUNCTIONFS_BIND while already enabled?"; bound = true; break; case FUNCTIONFS_ENABLE: CHECK(!started) << "received FUNCTIONFS_ENABLE while already running?"; started = true; CHECK(bound) << "received FUNCTIONFS_ENABLE while not bound?"; CHECK(!enabled) << "received FUNCTIONFS_ENABLE while already enabled?"; enabled = true; StartWorker(); break; case FUNCTIONFS_DISABLE: CHECK(bound) << "received FUNCTIONFS_DISABLE while not bound?"; CHECK(enabled) << "received FUNCTIONFS_DISABLE while not enabled?"; enabled = false; running = false; break; case FUNCTIONFS_UNBIND: CHECK(!enabled) << "received FUNCTIONFS_UNBIND while still enabled?"; CHECK(bound) << "received FUNCTIONFS_UNBIND when not bound?"; bound = false; running = false; break; } Loading Loading @@ -339,7 +355,7 @@ struct UsbFfsConnection : public Connection { LOG(FATAL) << "hit EOF on eventfd"; } WaitForEvents(); ReadEvents(); } }); } Loading Loading @@ -389,7 +405,7 @@ struct UsbFfsConnection : public Connection { return block; } void WaitForEvents() { void ReadEvents() { static constexpr size_t kMaxEvents = kUsbReadQueueDepth + kUsbWriteQueueDepth; struct io_event events[kMaxEvents]; struct timespec timeout = {.tv_sec = 0, .tv_nsec = 0}; Loading Loading @@ -552,6 +568,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))); Loading @@ -560,8 +578,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) { Loading