Popup removal 2
[framework/web/wrt-installer.git] / src / wrt-installer / plugin_utils.cpp
index ae29f5e..5368f3f 100644 (file)
  * @brief   Header file for plugin util
  */
 
+#include <unistd.h>
 #include "plugin_utils.h"
-#include <dpl/semaphore.h>
 #include <dpl/exception.h>
 #include <dpl/log/log.h>
 #include <dpl/wrt-dao-ro/global_config.h>
+#include <sys/file.h>
 
 using namespace WrtDB;
 
 namespace PluginUtils {
-const char PLUGIN_INSTALL_SEMAPHORE[] = "/.wrt_plugin_install_lock";
+const char* PLUGIN_INSTALL_LOCK_FILE = "/tmp/.wrt_plugin_install_lock";
 
-static DPL::Semaphore semaphore(PLUGIN_INSTALL_SEMAPHORE);
+static int s_plugin_install_lock_fd = -1;
 
-bool lockPluginInstallation()
+bool lockPluginInstallation(bool isPreload)
 {
-    Try {
-        semaphore.Lock();
+    if (isPreload) {
+        fprintf(stderr, "Skip create lock file.. \n");
         return true;
     }
-    Catch(DPL::Semaphore::Exception::Base){
+
+    int ret = 0;
+
+    LogInfo("Try to lock for plugins installation.");
+
+    s_plugin_install_lock_fd =
+        open(PLUGIN_INSTALL_LOCK_FILE, O_RDONLY | O_CREAT, 0666);
+
+    if (s_plugin_install_lock_fd == -1) {
+        LogError("Lock file open failed!");
+
+        return false;
+    }
+
+    ret = flock(s_plugin_install_lock_fd, LOCK_EX); //lock with waiting
+
+    if (ret == -1) {
+        LogError("Lock failed!");
+
+        close(s_plugin_install_lock_fd);
+        s_plugin_install_lock_fd = -1;
+
         return false;
     }
+
+    return true;
 }
 
-bool unlockPluginInstallation()
+bool unlockPluginInstallation(bool isPreload)
 {
-    Try {
-        semaphore.Unlock();
+    LogInfo("Unlock for plugins installation.");
+    if (isPreload) {
+        fprintf(stderr, "Skip plugin unlock.. \n");
         return true;
     }
-    Catch(DPL::Semaphore::Exception::Base){
-        return false;
+
+    if (s_plugin_install_lock_fd != -1) {
+        int ret = 0;
+
+        ret = flock(s_plugin_install_lock_fd, LOCK_UN); //unlock
+
+        if (ret == -1) {
+            LogError("Unlock failed!");
+        }
+
+        close(s_plugin_install_lock_fd);
+        s_plugin_install_lock_fd = -1;
+
+        return true;
+    } else {
+        LogError("Lock file was not created!");
     }
+
+    return false;
 }
 
 bool checkPluginInstallationRequired()
@@ -64,11 +105,11 @@ bool checkPluginInstallationRequired()
         checkFile(installRequest);
 
     switch (installationRequest) {
-        case FileState::FILE_EXISTS:
-            return true;
-        case FileState::FILE_NOT_EXISTS:
-            return false;
-        default:
+    case FileState::FILE_EXISTS:
+        return true;
+    case FileState::FILE_NOT_EXISTS:
+        return false;
+    default:
         LogWarning("Opening installation request file failed");
         return false;
     }