mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
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
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user