fix get move api as sync function
[framework/appfw/slp-pkgmgr.git] / client / src / pkgmgr.c
index ffccb2c..186a1b4 100755 (executable)
@@ -511,6 +511,49 @@ static int __app_list_cb (const pkgmgr_appinfo_h handle,
        return 0;
 }
 
+static int __sync_process(char *req_key)
+{
+       int ret =0;
+       char info_file[PKG_STRING_LEN_MAX] = {'\0', };
+       int result = 0;
+       int check_cnt = 0;
+       FILE *fp;
+       char buffer[PKG_ARGC_MAX] = {'\0', };
+
+       snprintf(info_file, PKG_STRING_LEN_MAX, "%s/%s", PKG_TMP_PATH, req_key);
+       while(1)
+       {
+               check_cnt ++;
+               if (access(info_file, F_OK) != 0) {
+                       _LOGD("file is not generated yet.... wait\n", info_file);
+                       usleep(10 * 1000);      /* 10ms sleep*/
+               } else {
+                       fp = fopen(info_file, "r");
+                       if (fp == NULL) {
+                               _LOGE("fopen failed\n");
+                               break;
+                       }
+                       fread(&buffer, sizeof(buffer), 1, fp);
+                       fclose(fp);
+
+                       result = atoi(buffer);
+                       _LOGD("info_file file is generated, result = %d. \n", result);
+                       break;
+               }
+
+               if (check_cnt > 500) {  /* 5s time over*/
+                       _LOGD("wait time over!!\n");
+                       break;
+               }
+       }
+
+       const char *rm_argv[] = { "/bin/rm", "-rf", info_file, NULL };
+       ret = __xsystem(rm_argv);
+       if (ret < 0)
+               _LOGE("__xsystem failed, ret=%d\n", ret);
+
+       return result;
+}
 static int __csc_process(const char *csc_path, char *result_path)
 {
        int ret = 0;
@@ -614,11 +657,6 @@ static int __get_size_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_gets
        char *temp = NULL;
        int i = 0;
        char buf[128] = {'\0'};
-       char size_info_file[PKG_STRING_LEN_MAX] = {'\0', };
-       int pkg_size = 0;
-       int check_cnt = 0;
-       FILE *fp;
-       char buffer[PKG_ARGC_MAX] = {'\0', };
 
        pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc;
        retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST\n");
@@ -668,47 +706,14 @@ static int __get_size_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_gets
        }
        _LOGD("[args] %s [len] %d\n", args, len);
 
-       /* 6. request install */
+       /* request */
        ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_GET_SIZE, pkgtype, pkgid, args, NULL, 1);
-
-       snprintf(size_info_file, PKG_STRING_LEN_MAX, "%s/%s", PKG_TMP_PATH, req_key);
-       while(1)
-       {
-               check_cnt ++;
-               if (access(size_info_file, F_OK) != 0) {
-                       _LOGD("file is not generated yet.... wait\n", size_info_file);
-                       usleep(10 * 1000);      /* 10ms sleep*/
-               } else {
-                       _LOGD("size_info_file file is generated!!\n");
-
-                       fp = fopen(size_info_file, "r");
-                       if (fp == NULL) {
-                               _LOGE("fopen failed\n");
-                               break;
-                       }
-                       fread(&buffer, sizeof(buffer), 1, fp);
-                       fclose(fp);
-
-                       pkg_size = atoi(buffer);
-                       _LOGD("pkg_sizepkg_size  == > %d!!\n", pkg_size);
-
-                       break;
-               }
-
-               if (check_cnt > 500) {  /* 5s time over*/
-                       _LOGD("wait time over!!\n");
-                       break;
-               }
-       }
-
-       const char *rm_argv[] = { "/bin/rm", "-rf", size_info_file, NULL };
-       ret = __xsystem(rm_argv);
        if (ret < 0)
-               _LOGE("__xsystem failed, ret=%d\n", ret);
+               _LOGE("comm_client_request failed, ret=%d\n", ret);
 
-       ret = pkg_size;
+       ret = __sync_process(req_key);
        if (ret < 0)
-               _LOGE("request failed, ret=%d\n", ret);
+               _LOGE("get size failed, ret=%d\n", ret);
 
 catch:
        for (i = 0; i < argcnt; i++)
@@ -749,7 +754,6 @@ static int __move_pkg_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_move
        installer_path = _get_backend_path_with_type(pkgtype);
        req_key = __get_req_key(pkgid);
        req_id = _get_request_id();
-       __add_op_cbinfo(mpc, req_id, req_key, event_cb, data);
 
        /* generate argv */
        snprintf(buf, 128, "%d", move_type);
@@ -790,10 +794,14 @@ static int __move_pkg_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_move
        }
        _LOGD("[args] %s [len] %d\n", args, len);
 
-       /* 6. request install */
+       /* 6. request */
        ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_MOVER, pkgtype, pkgid, args, NULL, 1);
        if (ret < 0)
-               _LOGE("request failed, ret=%d\n", ret);
+               _LOGE("comm_client_request failed, ret=%d\n", ret);
+
+       ret = __sync_process(pkgid);
+       if (ret != 0)
+               _LOGE("move pkg failed, ret=%d\n", ret);
 
 catch:
        for (i = 0; i < argcnt; i++)
@@ -1963,11 +1971,6 @@ API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type,
                tryvm_if((service_mode < PM_MOVE_TO_INTERNAL) || (service_mode > PM_MOVE_TO_SDCARD), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
 
                ret = __move_pkg_process(pc, pkgid, (pkgmgr_move_type)service_mode, event_cb, data);
-               if (ret < 0)
-                       _LOGE("__move_pkg_process fail \n");
-               else
-                       ret = PKGMGR_R_OK;
-
                break;
 
        case PM_REQUEST_GET_SIZE:
@@ -1976,9 +1979,6 @@ API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type,
                tryvm_if((service_mode < PM_GET_TOTAL_SIZE) || (service_mode > PM_GET_DATA_SIZE), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n");
 
                ret = __get_size_process(pc, pkgid, (pkgmgr_getsize_type)service_mode, event_cb, data);
-               if (ret < 0)
-                       _LOGE("__get_size_process fail \n");
-
                break;
 
        case PM_REQUEST_KILL_APP: