Fix thread-safety issue 78/316378/1 accepted/tizen_unified_dev accepted/tizen/unified/20240904.172701 accepted/tizen/unified/dev/20240910.111612 accepted/tizen/unified/toolchain/20241004.101835 accepted/tizen/unified/x/20240905.023704
authorSeonah Moon <seonah1.moon@samsung.com>
Tue, 20 Aug 2024 10:53:46 +0000 (19:53 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Tue, 20 Aug 2024 10:53:46 +0000 (19:53 +0900)
Change-Id: I86d3b26372536a0cd19ca0055bd1885fa24ab7e1

agent/download-agent-file.c
packaging/download-provider.spec

index 40511504f82b57704c087894c7b5e3315840014e..01d966deefafd6bdbad001ef3fd0473b577dee7a 100755 (executable)
@@ -32,7 +32,9 @@
 #include "download-agent-plugin-conf.h"
 #include "download-provider-client-manager.h"
 #include <storage.h>
+#include <pthread.h>
 
+static pthread_mutex_t mutex_file_writing = PTHREAD_MUTEX_INITIALIZER;
 
 #define NO_NAME_TEMP_STR "No name"
 #define MAX_SUFFIX_COUNT       1000000000
@@ -50,7 +52,7 @@ da_ret_t __saved_file_open(file_info_t *file_info)
        char *resolved_path = DA_NULL;
        void *fd = DA_NULL;
 
-       DA_LOGV("");
+       DA_LOGI("+");
 
        actual_file_path = file_info->file_path;
        if (!actual_file_path)
@@ -77,6 +79,7 @@ da_ret_t __saved_file_open(file_info_t *file_info)
                goto ERR;
        }
 
+       DA_LOGI("-");
        file_info->file_handle = fd;
 ERR:
        if (DA_RESULT_OK != ret)
@@ -528,11 +531,13 @@ da_ret_t __decide_file_path_for_resume(file_info_t *file_info)
 
 da_ret_t start_file_writing(da_info_t *da_info)
 {
+    DA_MUTEX_LOCK(&mutex_file_writing);
+
        da_ret_t ret = DA_RESULT_OK;
        file_info_t *file_info = DA_NULL;
        req_info_t *req_info = DA_NULL;
 
-       DA_LOGV("");
+       DA_LOGI("");
 
        NULL_CHECK_RET(da_info);
        file_info = da_info->file_info;
@@ -545,8 +550,10 @@ da_ret_t start_file_writing(da_info_t *da_info)
                char *file_path = DA_NULL;
                char *origin_path = DA_NULL;
                file_path = req_info->temp_file_path;
-               if (!file_path)
-                       return DA_ERR_INVALID_ARGUMENT;
+               if (!file_path) {
+                       ret = DA_ERR_INVALID_ARGUMENT;
+                       goto ERR;
+               }
                origin_path = file_info->file_path;
                file_info->file_path = strdup(file_path);
                free(origin_path);
@@ -554,7 +561,7 @@ da_ret_t start_file_writing(da_info_t *da_info)
                        ret = __decide_file_path_for_resume(file_info);
        } else if (file_info->file_path) {
                DA_LOGE("Already exist");
-               return ret;
+               goto ERR;
        } else {
                ret = __decide_file_path(da_info);
        }
@@ -576,6 +583,8 @@ da_ret_t start_file_writing(da_info_t *da_info)
        }
        ret = __saved_file_open(file_info);
 ERR:
+       DA_LOGI("result: %d", ret);
+       DA_MUTEX_UNLOCK(&mutex_file_writing);
        return ret;
 }
 
index c2b339243fef64503ef95b707303bfdc0206a7d6..c84e55b2af88fda2be1a576e54a20e57dcb2a803 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       download-provider
 Summary:    Download the contents in background
-Version:    2.3.16
+Version:    2.4.0
 Release:    0
 Group:      Development/Libraries
 License:    Apache-2.0