coverity error handling 80/178880/5 submit/tizen/20180516.113641
authorGuneet K <g.khosla@samsung.com>
Mon, 14 May 2018 10:38:34 +0000 (16:08 +0530)
committerk2.nagaraju <k2.nagaraju@samsung.com>
Wed, 16 May 2018 11:13:10 +0000 (16:43 +0530)
This patch makes handle_ a data member of XWalkExtensionManager class.
dlclose(handle_) is called from XWalkExtensionManager class destructor
to prevent resource leak.

coverity:109521

Change-Id: I4751e38e50b491dc54a893d5c9d1da4e41ab90f0
Signed-off-by: Guneet K <g.khosla@samsung.com>
extensions/common/xwalk_extension_manager.cc
extensions/common/xwalk_extension_manager.h

index 130eca8de8cb73132472db1bb92c8b9f75cdf7b7..f0e3084fcd32535bf5f3a7d60c3955bedeac8959 100755 (executable)
@@ -55,15 +55,18 @@ XWalkExtensionManager::XWalkExtensionManager() {
 }
 
 XWalkExtensionManager::~XWalkExtensionManager() {
+  for (auto dlhandle : handle_)
+    dlclose(dlhandle);
 }
 
 void XWalkExtensionManager::PreloadExtensions() {
   for (int i = 0; kPreloadLibs[i]; i++) {
     LOGGER(DEBUG) << "Preload libs : " << kPreloadLibs[i];
-    voidhandle = dlopen(kPreloadLibs[i], RTLD_NOW|RTLD_GLOBAL);
-    if (handle == nullptr) {
+    void *dlhandle = dlopen(kPreloadLibs[i], RTLD_NOW|RTLD_GLOBAL);
+    if (dlhandle == nullptr)
       LOGGER(WARN) << "Fail to load libs : " << dlerror();
-    }
+    else
+      handle_.push_back(dlhandle);
   }
 }
 
index cfbdede25b337bd36247bb8f6c90e76cae800fcb..786edfc3be0657cff7ccb339313a1b8cc7751336 100755 (executable)
@@ -40,6 +40,7 @@ class XWalkExtensionManager : public XWalkExtension::XWalkExtensionDelegate {
 
   StringSet extension_symbols_;
   ExtensionMap extensions_;
+  std::vector<void*> handle_;
 };
 
 }  // namespace extensions