hal : properly clear thread instances during vts
hal VTS test cases opens and closes adev continuously for test case.
Battery Listener is initialized during adev_open but not properly deinitialized
during adev_close .
in battery_listener unregister all the reference which were registered during
init .
Change-Id: I9793f24f717ec760a79ee4316c227b25de30609e
diff --git a/hal/audio_extn/battery_listener.cpp b/hal/audio_extn/battery_listener.cpp
index 55db095..604f81c 100644
--- a/hal/audio_extn/battery_listener.cpp
+++ b/hal/audio_extn/battery_listener.cpp
@@ -65,6 +65,7 @@
std::lock_guard<std::mutex> _l(mLock);
return statusToBool(mStatus);
}
+ void reset();
private:
sp<hardware::health::V2_0::IHealth> mHealth;
status_t init();
@@ -164,15 +165,19 @@
BatteryListenerImpl::~BatteryListenerImpl()
{
- {
- std::lock_guard<std::mutex> _l(mLock);
- if (mHealth != NULL)
- mHealth->unlinkToDeath(this);
- }
- mDone = true;
mThread->join();
}
+void BatteryListenerImpl::reset(){
+ std::lock_guard<std::mutex> _l(mLock);
+ if (mHealth != nullptr) {
+ mHealth->unregisterCallback(this);
+ mHealth->unlinkToDeath(this);
+ }
+ mStatus = BatteryStatus::UNKNOWN;
+ mDone = true;
+ mCond.notify_one();
+}
void BatteryListenerImpl::serviceDied(uint64_t cookie __unused,
const wp<hidl::base::V1_0::IBase>& who)
{
@@ -216,6 +221,7 @@
status_t batteryPropertiesListenerDeinit()
{
+ batteryListener->reset();
batteryListener.clear();
return OK;
}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 0580353..2d54b9f 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -9460,6 +9460,7 @@
if ((--audio_device_ref_count) == 0) {
if (audio_extn_spkr_prot_is_enabled())
audio_extn_spkr_prot_deinit();
+ audio_extn_battery_properties_listener_deinit();
audio_extn_snd_mon_unregister_listener(adev);
audio_extn_sound_trigger_deinit(adev);
audio_extn_listen_deinit(adev);