sdm: Destroy singleton DRMMaster instance

Destroy singleton DRMMaster instance on teardown, this is important
for back to back API test runs

Change-Id: I27e5d2adcc9d0805281dd0c858eaed5af745b269
CRs-fixed: 1114808
diff --git a/libdrmutils/drm_master.cpp b/libdrmutils/drm_master.cpp
index 239ec4c..e12b933 100644
--- a/libdrmutils/drm_master.cpp
+++ b/libdrmutils/drm_master.cpp
@@ -73,6 +73,12 @@
   return 0;
 }
 
+void DRMMaster::DestroyInstance() {
+  lock_guard<mutex> obj(s_lock);
+  delete s_instance;
+  s_instance = nullptr;
+}
+
 int DRMMaster::Init() {
   dev_fd_ = drmOpen("msm_drm", nullptr);
   if (dev_fd_ < 0) {
diff --git a/libdrmutils/drm_master.h b/libdrmutils/drm_master.h
index 8c32a1b..15fae68 100644
--- a/libdrmutils/drm_master.h
+++ b/libdrmutils/drm_master.h
@@ -79,6 +79,7 @@
    *   -ENODEV if device cannot be opened or initilization fails
    */
   static int GetInstance(DRMMaster **master);
+  static void DestroyInstance();
 
  private:
   DRMMaster() {}
diff --git a/sdm/libs/core/drm/hw_info_drm.cpp b/sdm/libs/core/drm/hw_info_drm.cpp
index d41206f..2fdef4e 100644
--- a/sdm/libs/core/drm/hw_info_drm.cpp
+++ b/sdm/libs/core/drm/hw_info_drm.cpp
@@ -117,6 +117,9 @@
     DRMLibLoader::GetInstance()->FuncDestroyDRMManager()();
     drm_mgr_intf_ = nullptr;
   }
+
+  DRMLibLoader::Destroy();
+  DRMMaster::DestroyInstance();
 }
 
 DisplayError HWInfoDRM::GetDynamicBWLimits(HWResourceInfo *hw_resource) {
@@ -390,17 +393,13 @@
 
 void HWInfoDRM::GetRotatorFormatsForType(int fd, uint32_t type,
                                          vector<LayerBufferFormat> *supported_formats) {
-  int ret = 0;
   struct v4l2_fmtdesc fmtdesc = {};
   fmtdesc.type = type;
-  while (!ret) {
-    ret = Sys::ioctl_(fd, static_cast<int>(VIDIOC_ENUM_FMT), &fmtdesc);
-    if (!ret) {
-      LayerBufferFormat sdm_format = kFormatInvalid;
-      GetSDMFormat(fmtdesc.pixelformat, &sdm_format);
-      if (sdm_format != kFormatInvalid) {
-        supported_formats->push_back(sdm_format);
-      }
+  while (!Sys::ioctl_(fd, static_cast<int>(VIDIOC_ENUM_FMT), &fmtdesc)) {
+    LayerBufferFormat sdm_format = kFormatInvalid;
+    GetSDMFormat(fmtdesc.pixelformat, &sdm_format);
+    if (sdm_format != kFormatInvalid) {
+      supported_formats->push_back(sdm_format);
     }
     fmtdesc.index++;
   }
@@ -432,9 +431,8 @@
 
 DisplayError HWInfoDRM::GetHWRotatorInfo(HWResourceInfo *hw_resource) {
   const uint32_t kMaxV4L2Nodes = 64;
-  bool found = false;
 
-  for (uint32_t i = 0; (i < kMaxV4L2Nodes) && (false == found); i++) {
+  for (uint32_t i = 0; i < kMaxV4L2Nodes; i++) {
     string path = "/sys/class/video4linux/video" + to_string(i) + "/name";
     Sys::fstream fs(path, fstream::in);
     if (!fs.is_open()) {
@@ -447,9 +445,9 @@
       hw_resource->hw_rot_info.num_rotator++;
       hw_resource->hw_rot_info.type = HWRotatorInfo::ROT_TYPE_V4L2;
       hw_resource->hw_rot_info.has_downscale = true;
-      // We support only 1 rotator
-      found = true;
       GetRotatorSupportedFormats(i, hw_resource);
+      // We support only 1 rotator
+      break;
     }
   }