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

Commit cd74d781 authored by Fan Xu's avatar Fan Xu
Browse files

Change mClientList to std::set mClientSet

Change-Id: I34af8a96916032630c05ea3b4e9987a6e09d6f51
Fix: 119819092
Test: BufferHubBuffer_test (passed)
parent a7422fe2
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -44,8 +44,8 @@ Return<void> BufferHubService::allocateBuffer(const HardwareBufferDescription& d

    sp<BufferClient> client = BufferClient::create(this, node);
    // Add it to list for bookkeeping and dumpsys.
    std::lock_guard<std::mutex> lock(mClientListMutex);
    mClientList.push_back(client);
    std::lock_guard<std::mutex> lock(mClientSetMutex);
    mClientSet.emplace(client);

    _hidl_cb(/*bufferClient=*/client, /*status=*/BufferHubStatus::NO_ERROR);
    return Void();
@@ -86,8 +86,8 @@ Return<void> BufferHubService::importBuffer(const hidl_handle& tokenHandle,

    sp<BufferClient> client = new BufferClient(*originClient);

    std::lock_guard<std::mutex> lock(mClientListMutex);
    mClientList.push_back(client);
    std::lock_guard<std::mutex> lock(mClientSetMutex);
    mClientSet.emplace(client);
    _hidl_cb(/*bufferClient=*/client, /*status=*/BufferHubStatus::NO_ERROR);
    return Void();
}
@@ -114,10 +114,10 @@ hidl_handle BufferHubService::registerToken(const wp<BufferClient>& client) {
void BufferHubService::onClientClosed(const BufferClient* client) {
    removeTokenByClient(client);

    std::lock_guard<std::mutex> lock(mClientListMutex);
    auto iter = std::find(mClientList.begin(), mClientList.end(), client);
    if (iter != mClientList.end()) {
        mClientList.erase(iter);
    std::lock_guard<std::mutex> lock(mClientSetMutex);
    auto iter = std::find(mClientSet.begin(), mClientSet.end(), client);
    if (iter != mClientSet.end()) {
        mClientSet.erase(iter);
    }
}

+2 −2
Original line number Diff line number Diff line
@@ -55,8 +55,8 @@ private:
    void removeTokenByClient(const BufferClient* client);

    // List of active BufferClient for bookkeeping.
    std::mutex mClientListMutex;
    std::vector<wp<BufferClient>> mClientList GUARDED_BY(mClientListMutex);
    std::mutex mClientSetMutex;
    std::set<wp<BufferClient>> mClientSet GUARDED_BY(mClientSetMutex);

    // TODO(b/118180214): use a more secure implementation
    std::mt19937 mTokenEngine;