From 95244dd6c0e7ccb85a32eaac94ecb3376fb3a095 Mon Sep 17 00:00:00 2001 From: dianlujitao Date: Tue, 26 Mar 2019 11:07:51 +0800 Subject: Transfer /dev/mtp_usb fd ownership when instancing MtpDevHandle /dev/mtp_usb was opened before instancing MtpDevHandle, the existing fd should be passed in otherwise MtpDevHandle::start would be blocked as it attempted to open the device twice. Change-Id: I6afc5b6926930dad77aceac2f6a00e1c6759a883 --- mtp/ffs/MtpDevHandle.cpp | 5 +++-- mtp/ffs/MtpDevHandle.h | 2 +- mtp/ffs/MtpServer.cpp | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mtp/ffs/MtpDevHandle.cpp b/mtp/ffs/MtpDevHandle.cpp index d6a8b820d..e22ba55b2 100644 --- a/mtp/ffs/MtpDevHandle.cpp +++ b/mtp/ffs/MtpDevHandle.cpp @@ -33,8 +33,9 @@ constexpr char mtp_dev_path[] = "/dev/mtp_usb"; -MtpDevHandle::MtpDevHandle() - : mFd(-1) {}; +MtpDevHandle::MtpDevHandle(int controlFd) { + mFd.reset(controlFd); +} MtpDevHandle::~MtpDevHandle() {} diff --git a/mtp/ffs/MtpDevHandle.h b/mtp/ffs/MtpDevHandle.h index 4b0692889..4ea1fdb2e 100644 --- a/mtp/ffs/MtpDevHandle.h +++ b/mtp/ffs/MtpDevHandle.h @@ -25,7 +25,7 @@ private: android::base::unique_fd mFd; public: - MtpDevHandle(); + MtpDevHandle(int controlFd); ~MtpDevHandle(); int read(void *data, size_t len); int write(const void *data, size_t len); diff --git a/mtp/ffs/MtpServer.cpp b/mtp/ffs/MtpServer.cpp index 5f17ff2ff..fa6702433 100755 --- a/mtp/ffs/MtpServer.cpp +++ b/mtp/ffs/MtpServer.cpp @@ -123,7 +123,7 @@ MtpServer::MtpServer(IMtpDatabase* database, int controlFd, bool ptp, mHandle = aio_compat ? new MtpFfsCompatHandle(controlFd) : new MtpFfsHandle(controlFd); mHandle->writeDescriptors(mPtp); } else { - mHandle = new MtpDevHandle(); + mHandle = new MtpDevHandle(controlFd); } } -- cgit v1.2.3