sdm: drm: Destroy DRMManager and resource info singletons
Destroy DRMManager and resource info singletons on tear down,
so that back to back tests can parse new resource info afresh.
Change-Id: Ib65f8fec73e7a70e5bf2f444958756d1e5ddc654
diff --git a/libdrmutils/drm_interface.h b/libdrmutils/drm_interface.h
index 6c06e20..94a48e1 100644
--- a/libdrmutils/drm_interface.h
+++ b/libdrmutils/drm_interface.h
@@ -298,7 +298,7 @@
typedef int (*GetDRMManager)(int fd, DRMManagerInterface **intf);
/* Destroy DRMManager instance */
-typedef int (*DestroyDRMManager)(DRMManagerInterface *intf);
+typedef int (*DestroyDRMManager)();
/*
* DRM Manager Interface - Any class which plans to implement helper function for vendor
diff --git a/libdrmutils/drm_lib_loader.cpp b/libdrmutils/drm_lib_loader.cpp
index 845c150..83c9f1b 100644
--- a/libdrmutils/drm_lib_loader.cpp
+++ b/libdrmutils/drm_lib_loader.cpp
@@ -51,6 +51,14 @@
return s_instance;
}
+void DRMLibLoader::Destroy() {
+ lock_guard<mutex> obj(s_lock);
+ if (s_instance) {
+ delete s_instance;
+ s_instance = nullptr;
+ }
+}
+
DRMLibLoader::DRMLibLoader() {
if (Open("libsdedrm.so")) {
if (Sym("GetDRMManager", reinterpret_cast<void **>(&func_get_drm_manager_)) &&
@@ -60,6 +68,13 @@
}
}
+DRMLibLoader::~DRMLibLoader() {
+ if (lib_) {
+ ::dlclose(lib_);
+ lib_ = nullptr;
+ }
+}
+
bool DRMLibLoader::Open(const char *lib_name) {
lib_ = ::dlopen(lib_name, RTLD_NOW);
diff --git a/libdrmutils/drm_lib_loader.h b/libdrmutils/drm_lib_loader.h
index dbc31a5..d132d69 100644
--- a/libdrmutils/drm_lib_loader.h
+++ b/libdrmutils/drm_lib_loader.h
@@ -37,12 +37,13 @@
class DRMLibLoader {
public:
- ~DRMLibLoader() {}
+ ~DRMLibLoader();
bool IsLoaded() { return is_loaded_; }
sde_drm::GetDRMManager FuncGetDRMManager() { return func_get_drm_manager_; }
sde_drm::DestroyDRMManager FuncDestroyDRMManager() { return func_destroy_drm_manager_; }
static DRMLibLoader *GetInstance();
+ static void Destroy();
private:
DRMLibLoader();