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);