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

Commit 024d8d17 authored by Mike Yu's avatar Mike Yu Committed by Automerger Merge Worker
Browse files

Test: Use condition_variable to wait for onDnsEvent am: f47c0074

parents df2490da f47c0074
Loading
Loading
Loading
Loading
+7 −13
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@

#include <thread>

#include <android-base/chrono_utils.h>
#include <android-base/format.h>

namespace android::net::metrics {
@@ -26,7 +25,6 @@ namespace android::net::metrics {
using android::base::ScopedLockAssertion;
using std::chrono::milliseconds;

constexpr milliseconds kRetryIntervalMs{20};
constexpr milliseconds kEventTimeoutMs{5000};

bool DnsMetricsListener::DnsEvent::operator==(const DnsMetricsListener::DnsEvent& o) const {
@@ -73,6 +71,7 @@ std::ostream& operator<<(std::ostream& os, const DnsMetricsListener::DnsEvent& d
        mDnsEventRecords.push(
                {netId, eventType, returnCode, hostname, ipAddresses, ipAddressesCount});
    }
    mCv.notify_all();
    return ::ndk::ScopedAStatus::ok();
}

@@ -110,18 +109,13 @@ bool DnsMetricsListener::findAndRemoveValidationRecord(const ServerKey& key, con
}

std::optional<DnsMetricsListener::DnsEvent> DnsMetricsListener::popDnsEvent() {
    // Wait until the queue is not empty or timeout.
    android::base::Timer t;
    while (t.duration() < milliseconds{1000}) {
        {
            std::lock_guard lock(mMutex);
            if (!mDnsEventRecords.empty()) break;
        }
        std::this_thread::sleep_for(kRetryIntervalMs);
    }
    std::unique_lock lock(mMutex);
    ScopedLockAssertion assume_lock(mMutex);

    std::lock_guard lock(mMutex);
    if (mDnsEventRecords.empty()) return std::nullopt;
    if (!mCv.wait_for(lock, kEventTimeoutMs,
                      [&]() REQUIRES(mMutex) { return !mDnsEventRecords.empty(); })) {
        return std::nullopt;
    }

    auto ret = mDnsEventRecords.front();
    mDnsEventRecords.pop();
+7 −12
Original line number Diff line number Diff line
@@ -33,11 +33,11 @@ using android::base::ScopedLockAssertion;
using std::chrono::milliseconds;

constexpr milliseconds kEventTimeoutMs{5000};
constexpr milliseconds kRetryIntervalMs{20};

::ndk::ScopedAStatus UnsolicitedEventListener::onDnsHealthEvent(const DnsHealthEventParcel& event) {
    std::lock_guard lock(mMutex);
    if (event.netId == mNetId) mDnsHealthResultRecords.push(event.healthResult);
    mCv.notify_all();
    return ::ndk::ScopedAStatus::ok();
}

@@ -105,18 +105,13 @@ bool UnsolicitedEventListener::waitForNat64Prefix(int operation, const milliseco
}

Result<int> UnsolicitedEventListener::popDnsHealthResult() {
    // Wait until the queue is not empty or timeout.
    android::base::Timer t;
    while (t.duration() < milliseconds{1000}) {
        {
            std::lock_guard lock(mMutex);
            if (!mDnsHealthResultRecords.empty()) break;
        }
        std::this_thread::sleep_for(kRetryIntervalMs);
    }
    std::unique_lock lock(mMutex);
    ScopedLockAssertion assume_lock(mMutex);

    std::lock_guard lock(mMutex);
    if (mDnsHealthResultRecords.empty()) return Error() << "Dns health result record is empty";
    if (!mCv.wait_for(lock, kEventTimeoutMs,
                      [&]() REQUIRES(mMutex) { return !mDnsHealthResultRecords.empty(); })) {
        return Error() << "Dns health result record is empty";
    }

    auto ret = mDnsHealthResultRecords.front();
    mDnsHealthResultRecords.pop();