fix get move api as sync function
authorjunsuk77.oh <junsuk77.oh@samsung.com>
Wed, 15 May 2013 08:19:10 +0000 (17:19 +0900)
committerjunsuk77.oh <junsuk77.oh@samsung.com>
Wed, 15 May 2013 08:19:10 +0000 (17:19 +0900)
Change-Id: I5e034443cd68fcbc5a2c420213b120f1bc23c27b
Signed-off-by: junsuk77.oh <junsuk77.oh@samsung.com>
client/src/pkgmgr.c
tool/pkg_cmd.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:
index 1ae2cbe..4f01a5f 100755 (executable)
@@ -815,65 +815,39 @@ static int __process_request()
                break;
 
        case MOVE_REQ:
-               if (data.quiet == 1) {
-                       if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
-                               printf("Please provide the arguments.\n");
-                               printf("use -h option to see usage\n");
-                               ret = -1;
-                               break;
-                       }
-                       if (data.type < 0 || data.type > 1) {
-                               printf("Invalid move type...See usage\n");
-                               ret = -1;
-                               break;
-                       }
-                       pc = pkgmgr_client_new(PC_REQUEST);
-                       if (pc == NULL) {
-                               printf("PkgMgr Client Creation Failed\n");
-                               ret = -1;
-                               break;
-                       }
-                       mode = PM_QUIET;
-                       ret = __is_app_installed(data.pkgid);
-                       if (ret == -1) {
-                               printf("package is not installed\n");
-                               break;
-                       }
-                       ret = pkgmgr_client_move(pc, data.pkg_type, data.pkgid,  data.type, mode);
-                       if (ret < 0)
-                               break;
-                       ret = data.result;
-               } else {
-                       if (data.pkgid[0] == '\0') {
-                               printf("Please provide the arguments.\n");
-                               printf("use -h option to see usage\n");
-                               ret = -1;
-                               break;
-                       }
-                       if (data.type < 0 || data.type > 1) {
-                               printf("Invalid move type...See usage\n");
-                               ret = -1;
-                               break;
-                       }
-                       g_type_init();
-                       main_loop = g_main_loop_new(NULL, FALSE);
-                       pc = pkgmgr_client_new(PC_REQUEST);
-                       if (pc == NULL) {
-                               printf("PkgMgr Client Creation Failed\n");
-                               ret = -1;
-                               break;
-                       }
-                       ret = __is_app_installed(data.pkgid);
-                       if (ret == -1) {
-                               printf("package is not installed\n");
-                               break;
-                       }
-                       ret = pkgmgr_client_request_service(PM_REQUEST_MOVE, data.type, pc, NULL, data.pkgid, NULL, __return_cb, NULL);
-                       if (ret < 0)
-                               break;
-                       g_main_loop_run(main_loop);
-                       ret = data.result;
+               if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
+                       printf("Please provide the arguments.\n");
+                       printf("use -h option to see usage\n");
+                       ret = -1;
+                       break;
+               }
+               if (data.type < 0 || data.type > 1) {
+                       printf("Invalid move type...See usage\n");
+                       ret = -1;
+                       break;
+               }
+               pc = pkgmgr_client_new(PC_REQUEST);
+               if (pc == NULL) {
+                       printf("PkgMgr Client Creation Failed\n");
+                       ret = -1;
+                       break;
+               }
+               mode = PM_QUIET;
+               ret = __is_app_installed(data.pkgid);
+               if (ret == -1) {
+                       printf("package is not installed\n");
+                       break;
                }
+               if (data.quiet == 0)
+                       ret = pkgmgr_client_move(pc, data.pkg_type, data.pkgid,  data.type, mode);
+               else
+                       ret = pkgmgr_client_request_service(PM_REQUEST_MOVE, data.type, pc, NULL, data.pkgid, NULL, NULL, NULL);
+
+               printf("pkg[%s] move result = %d\n", data.pkgid, ret);
+
+               if (ret < 0)
+                       break;
+               ret = data.result;
                break;
 
        case APPPATH_REQ:
@@ -1052,7 +1026,7 @@ static int __process_request()
                        break;
                }
 
-               ret = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, data.type, pc, NULL, data.pkgid, NULL, __return_cb, NULL);
+               ret = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, data.type, pc, NULL, data.pkgid, NULL, NULL, NULL);
                if (ret < 0){
                        data.result = PKGCMD_ERR_FATAL_ERROR;
                        break;