diff --git a/adb/Android.bp b/adb/Android.bp index cb5c1df68..f8e5b38e3 100644 --- a/adb/Android.bp +++ b/adb/Android.bp @@ -567,7 +567,6 @@ cc_library { cc_binary { name: "adbd", defaults: ["adbd_defaults", "host_adbd_supported", "libadbd_binary_dependencies"], - stl: "libc++_static", recovery_available: true, apex_available: ["com.android.adbd"], diff --git a/adb/daemon/usb.cpp b/adb/daemon/usb.cpp index 7fff05af1..a66387193 100644 --- a/adb/daemon/usb.cpp +++ b/adb/daemon/usb.cpp @@ -231,7 +231,14 @@ struct UsbFfsConnection : public Connection { offset += write_size; } } - SubmitWrites(); + + // Wake up the worker thread to submit writes. + uint64_t notify = 1; + ssize_t rc = adb_write(worker_event_fd_.get(), ¬ify, sizeof(notify)); + if (rc < 0) { + PLOG(FATAL) << "failed to notify worker eventfd to submit writes"; + } + return true; } @@ -443,6 +450,9 @@ struct UsbFfsConnection : public Connection { } ReadEvents(); + + std::lock_guard lock(write_mutex_); + SubmitWrites(); } }); } @@ -626,8 +636,6 @@ struct UsbFfsConnection : public Connection { write_requests_.erase(it); size_t outstanding_writes = --writes_submitted_; LOG(DEBUG) << "USB write: reaped, down to " << outstanding_writes; - - SubmitWrites(); } IoWriteBlock CreateWriteBlock(std::shared_ptr payload, size_t offset, size_t len,