summaryrefslogtreecommitdiffstats
path: root/vehicle
diff options
context:
space:
mode:
authorPavel Maltsev <pavelm@google.com>2016-12-02 16:43:24 -0800
committerPavel Maltsev <pavelm@google.com>2016-12-05 10:22:38 -0800
commit6fee6289df5116acbf131b9e7839a08a941ceab1 (patch)
treea44c2236745d3f3ae39b7bcb997dc33fa4dfbbcf /vehicle
parent9c1d09012c8dccf7a9a6282bc78fbd046fe4052f (diff)
downloadandroid_hardware_interfaces-6fee6289df5116acbf131b9e7839a08a941ceab1.tar.gz
android_hardware_interfaces-6fee6289df5116acbf131b9e7839a08a941ceab1.tar.bz2
android_hardware_interfaces-6fee6289df5116acbf131b9e7839a08a941ceab1.zip
Fixed race condition in ConcurrentQueue
Also, minor test cleanup Test: fixed failing HalClientVectorTest test, verified others Change-Id: I693cac8e31019347b1d3c4f34c0554fbc9b062d0 Fix: b/33305646
Diffstat (limited to 'vehicle')
-rw-r--r--vehicle/2.0/default/tests/SubscriptionManager_test.cpp3
-rw-r--r--vehicle/2.0/default/tests/VehicleHalManager_test.cpp18
-rw-r--r--vehicle/2.0/default/tests/VehicleObjectPool_test.cpp3
-rw-r--r--vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp2
-rw-r--r--vehicle/2.0/default/vehicle_hal_manager/ConcurrentQueue.h17
5 files changed, 17 insertions, 26 deletions
diff --git a/vehicle/2.0/default/tests/SubscriptionManager_test.cpp b/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
index 19b11e6b7..171a692b5 100644
--- a/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
+++ b/vehicle/2.0/default/tests/SubscriptionManager_test.cpp
@@ -19,9 +19,6 @@
#include <gtest/gtest.h>
-#include <vehicle_hal_manager/VehiclePropConfigIndex.h>
-#include <VehicleHal.h>
-#include <vehicle_hal_manager/VehicleHalManager.h>
#include "vehicle_hal_manager/SubscriptionManager.h"
#include "VehicleHalTestUtils.h"
diff --git a/vehicle/2.0/default/tests/VehicleHalManager_test.cpp b/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
index 6ef12052d..d06f6f4fa 100644
--- a/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
+++ b/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
@@ -17,13 +17,11 @@
#include <unordered_map>
#include <iostream>
+#include <utils/SystemClock.h>
+
#include <gtest/gtest.h>
-#include <vehicle_hal_manager/VehiclePropConfigIndex.h>
-#include <VehicleHal.h>
-#include <vehicle_hal_manager/VehicleHalManager.h>
-#include <utils/SystemClock.h>
-#include "vehicle_hal_manager/SubscriptionManager.h"
+#include "vehicle_hal_manager/VehicleHalManager.h"
#include "VehicleHalTestUtils.h"
@@ -429,11 +427,11 @@ TEST(HalClientVectorTest, basic) {
clients.addOrUpdate(c2);
ASSERT_EQ(2u, clients.size());
ASSERT_FALSE(clients.isEmpty());
- ASSERT_GE(0, clients.indexOf(c1));
- ASSERT_GE(0, clients.remove(c1));
- ASSERT_GE(0, clients.indexOf(c1));
- ASSERT_GE(0, clients.remove(c1));
- ASSERT_GE(0, clients.remove(c2));
+ ASSERT_LE(0, clients.indexOf(c1));
+ ASSERT_LE(0, clients.remove(c1));
+ ASSERT_GT(0, clients.indexOf(c1)); // c1 was already removed
+ ASSERT_GT(0, clients.remove(c1)); // attempt to remove c1 again
+ ASSERT_LE(0, clients.remove(c2));
ASSERT_TRUE(clients.isEmpty());
}
diff --git a/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp b/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
index 88b1be05d..135f9fa27 100644
--- a/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
+++ b/vehicle/2.0/default/tests/VehicleObjectPool_test.cpp
@@ -18,9 +18,10 @@
#include <gtest/gtest.h>
-#include <vehicle_hal_manager/VehicleObjectPool.h>
#include <utils/SystemClock.h>
+#include "vehicle_hal_manager/VehicleObjectPool.h"
+
namespace android {
namespace hardware {
namespace vehicle {
diff --git a/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp b/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
index aae7e62a8..28cdcbb80 100644
--- a/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
+++ b/vehicle/2.0/default/tests/VehiclePropConfigIndex_test.cpp
@@ -16,7 +16,7 @@
#include <gtest/gtest.h>
-#include <vehicle_hal_manager/VehiclePropConfigIndex.h>
+#include "vehicle_hal_manager/VehiclePropConfigIndex.h"
#include "VehicleHalTestUtils.h"
diff --git a/vehicle/2.0/default/vehicle_hal_manager/ConcurrentQueue.h b/vehicle/2.0/default/vehicle_hal_manager/ConcurrentQueue.h
index 485f3dc38..8f575dc8b 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/ConcurrentQueue.h
+++ b/vehicle/2.0/default/vehicle_hal_manager/ConcurrentQueue.h
@@ -108,20 +108,17 @@ public:
mQueue = queue;
mBatchInterval = batchInterval;
- std::thread(&BatchingConsumer<T>::runInternal, this, func).detach();
+ mWorkerThread = std::thread(
+ &BatchingConsumer<T>::runInternal, this, func);
}
void requestStop() {
- if (mState.exchange(State::STOP_REQUESTED) != State::RUNNING) {
- mState = State::STOPPED;
- mCondStopped.notify_one();
- }
+ mState = State::STOP_REQUESTED;
}
void waitStopped() {
- std::unique_lock<std::mutex> g(mLock);
- while (State::STOPPED != mState) {
- mCondStopped.wait(g);
+ if (mWorkerThread.joinable()) {
+ mWorkerThread.join();
}
}
@@ -144,12 +141,10 @@ private:
}
mState = State::STOPPED;
- mCondStopped.notify_one();
}
private:
- std::mutex mLock;
- std::condition_variable mCondStopped;
+ std::thread mWorkerThread;
std::atomic<State> mState;
std::chrono::nanoseconds mBatchInterval;