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

Commit 9b6404fe authored by Yu Shan's avatar Yu Shan
Browse files

Fix bugs in TestWakeupClientServiceImpl.

Initialize atomic variable. By default, it is not initialized.
Check task queue stopped status while returning from the wait to
prevent infinite loop.

Test: atest TestWakeupClientServerHostUnitTest
Bug: 317907688
Change-Id: I0259203797caca2fe3ff716c17398d3c1feab94d
parent 4f5ede64
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ class TaskQueue final {
    void waitForTask();
    void stopWait();
    bool isEmpty();
    bool isStopped();

  private:
    friend class TaskTimeoutMessageHandler;
@@ -87,7 +88,7 @@ class TaskQueue final {
            GUARDED_BY(mLock);
    // A variable to notify mTasks is not empty.
    std::condition_variable mTasksNotEmptyCv;
    std::atomic<bool> mStopped;
    std::atomic<bool> mStopped = false;
    android::sp<Looper> mLooper;
    android::sp<TaskTimeoutMessageHandler> mTaskTimeoutMessageHandler;
    std::atomic<int> mTaskIdCounter = 0;
@@ -214,7 +215,7 @@ class TestWakeupClientServiceImpl : public WakeupClient::Service {
    std::atomic<bool> mRemoteTaskConnectionAlive = false;
    std::mutex mLock;
    bool mGeneratingFakeTask GUARDED_BY(mLock);
    std::atomic<bool> mServerStopped;
    std::atomic<bool> mServerStopped = false;
    std::unordered_map<std::string, std::unordered_map<std::string, ScheduleInfo>>
            mInfoByScheduleIdByClientId GUARDED_BY(mLock);

+7 −1
Original line number Diff line number Diff line
@@ -105,6 +105,10 @@ void TaskQueue::waitForTask() {
    });
}

bool TaskQueue::isStopped() {
    return mStopped;
}

void TaskQueue::stopWait() {
    mStopped = true;
    {
@@ -241,7 +245,7 @@ Status TestWakeupClientServiceImpl::GetRemoteTasks(ServerContext* context,
    while (true) {
        mTaskQueue->waitForTask();

        if (mServerStopped) {
        if (mTaskQueue->isStopped()) {
            // Server stopped, exit the loop.
            printf("Server stopped exit loop\n");
            break;
@@ -250,11 +254,13 @@ Status TestWakeupClientServiceImpl::GetRemoteTasks(ServerContext* context,
        while (true) {
            auto maybeTask = mTaskQueue->maybePopOne();
            if (!maybeTask.has_value()) {
                printf("no task left\n");
                // No task left, loop again and wait for another task(s).
                break;
            }
            // Loop through all the task in the queue but obtain lock for each element so we don't
            // hold lock while writing the response.
            printf("Sending one remote task\n");
            const GetRemoteTasksResponse& response = maybeTask.value();
            if (!writer->Write(response)) {
                // Broken stream, maybe the client is shutting down.