Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5e0d478 authored by Ashish Kumar Gupta's avatar Ashish Kumar Gupta Committed by Android (Google) Code Review
Browse files

Merge "Joining the thread before the MtpFfsHandle object's destruction" into main

parents 69cd79b7 24b80a25
Loading
Loading
Loading
Loading
+7 −13
Original line number Diff line number Diff line
@@ -297,9 +297,10 @@ int MtpFfsHandle::start(bool ptp) {
}

void MtpFfsHandle::close() {
    auto timeout = std::chrono::seconds(2);
    std::unique_lock lk(m);
    cv.wait_for(lk, timeout ,[this]{return child_threads==0;});
    // Join all child threads before destruction
    for (auto& thread : mChildThreads) {
        thread.join();
    }

    io_destroy(mCtx);
    closeEndpoints();
@@ -677,12 +678,10 @@ int MtpFfsHandle::sendEvent(mtp_event me) {
    memcpy(temp, me.data, me.length);
    me.data = temp;

    std::unique_lock lk(m);
    child_threads++;
    lk.unlock();

    std::thread t([this, me]() { return this->doSendEvent(me); });
    t.detach();

    // Store the thread object for later joining
    mChildThreads.emplace_back(std::move(t));
    return 0;
}

@@ -692,11 +691,6 @@ void MtpFfsHandle::doSendEvent(mtp_event me) {
    if (static_cast<unsigned>(ret) != length)
        PLOG(ERROR) << "Mtp error sending event thread!";
    delete[] reinterpret_cast<char*>(me.data);

    std::unique_lock lk(m);
    child_threads--;
    lk.unlock();
    cv.notify_one();
}

} // namespace android
+1 −3
Original line number Diff line number Diff line
@@ -60,9 +60,7 @@ protected:
    bool mCanceled;
    bool mBatchCancel;

    std::mutex m;
    std::condition_variable cv;
    std::atomic<int> child_threads{0};
    std::vector<std::thread> mChildThreads;

    android::base::unique_fd mControl;
    // "in" from the host's perspective => sink for mtp server