Fix the bug of creating lock file for PD buffer. 43/14743/1
authorSung-jae Park <nicesj.park@samsung.com>
Fri, 10 Jan 2014 12:54:34 +0000 (21:54 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Fri, 10 Jan 2014 12:54:34 +0000 (21:54 +0900)
Master only creates lock file for LB
This patch will fix it.

But,. buffer_handler and script_handler creates circular dependency.

buffer_handler refs script_handler
script_handler refs buffer_handler

This circular dependency must has to be resolved.

Change-Id: Icee11b696101c821cf0d1c68b32002f58db7b81e

packaging/data-provider-master.spec
src/buffer_handler.c

index 382346b..cb99b43 100644 (file)
@@ -1,6 +1,6 @@
 Name: data-provider-master
 Summary: Master service provider for liveboxes
-Version: 0.33.2
+Version: 0.33.3
 Release: 1
 Group: HomeTF/Livebox
 License: Flora
index b00a784..a48e3f2 100644 (file)
@@ -52,6 +52,7 @@
 #include "client_life.h"
 #include "client_rpc.h"
 #include "buffer_handler.h"
+#include "script_handler.h" // Reverse dependency. must has to be broken
 
 struct buffer {
        enum {
@@ -144,6 +145,7 @@ static int create_lock_file(struct buffer_info *info)
        const char *id;
        int len;
        char *file;
+       char target[3] = "pd";
 
        if (!info->inst) {
                return LB_STATUS_ERROR_INVALID;
@@ -161,7 +163,13 @@ static int create_lock_file(struct buffer_info *info)
                return LB_STATUS_ERROR_MEMORY;
        }
 
-       snprintf(file, len + 20, "%s.%s.lck", util_uri_to_path(id), instance_pd_buffer(info->inst) == info ? "pd" : "lb");
+       if (script_handler_buffer_info(instance_pd_script(info->inst)) != info && instance_pd_buffer(info->inst) != info) {
+               target[0] = 'l';
+               target[1] = 'b';
+               /* target[2] = '\0'; // We already have this ;) */
+       }
+
+       snprintf(file, len + 20, "%s.%s.lck", util_uri_to_path(id), target);
        info->lock_fd = open(file, O_WRONLY|O_CREAT, 0644);
        if (info->lock_fd < 0) {
                ErrPrint("open: %s\n", strerror(errno));