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
diff --git a/automotive/remoteaccess/test_grpc_server/impl/include/TestWakeupClientServiceImpl.h b/automotive/remoteaccess/test_grpc_server/impl/include/TestWakeupClientServiceImpl.h
index a7f47c2..41cc5d0 100644
--- a/automotive/remoteaccess/test_grpc_server/impl/include/TestWakeupClientServiceImpl.h
+++ b/automotive/remoteaccess/test_grpc_server/impl/include/TestWakeupClientServiceImpl.h
@@ -78,6 +78,7 @@
void waitForTask();
void stopWait();
bool isEmpty();
+ bool isStopped();
private:
friend class TaskTimeoutMessageHandler;
@@ -87,7 +88,7 @@
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 @@
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);
diff --git a/automotive/remoteaccess/test_grpc_server/impl/src/TestWakeupClientServiceImpl.cpp b/automotive/remoteaccess/test_grpc_server/impl/src/TestWakeupClientServiceImpl.cpp
index d223353..eed3495 100644
--- a/automotive/remoteaccess/test_grpc_server/impl/src/TestWakeupClientServiceImpl.cpp
+++ b/automotive/remoteaccess/test_grpc_server/impl/src/TestWakeupClientServiceImpl.cpp
@@ -105,6 +105,10 @@
});
}
+bool TaskQueue::isStopped() {
+ return mStopped;
+}
+
void TaskQueue::stopWait() {
mStopped = true;
{
@@ -241,7 +245,7 @@
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 @@
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.