Fix send_fail_signal 20/73920/10 accepted/tizen/common/20160621.184531 accepted/tizen/ivi/20160622.093658 accepted/tizen/mobile/20160622.093548 accepted/tizen/tv/20160622.093617 accepted/tizen/wearable/20160622.093638 submit/tizen/20160621.063045
authorSangyoon Jang <s89.jang@samsung.com>
Fri, 10 Jun 2016 05:13:10 +0000 (14:13 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Tue, 21 Jun 2016 07:33:28 +0000 (16:33 +0900)
Change-Id: If5905f46cfc249135c34a40c29165e3e17c5f5f9
Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
include/pkgmgr-server.h
src/pkgmgr-server.c

index b30eb65..0c8b9dc 100644 (file)
@@ -96,6 +96,8 @@ typedef struct {
 typedef struct backend_info_t {
        int pid;
        uid_t uid;
+       int req_type;
+       char req_id[MAX_REQ_ID_LEN];
        char pkgtype[MAX_PKG_TYPE_LEN];
        char pkgid[MAX_PKG_NAME_LEN];
        char args[MAX_PKG_ARGS_LEN];
index 91b19b1..29aa55b 100644 (file)
@@ -172,30 +172,37 @@ catch:
        return;
 }
 
-static void send_fail_signal(char *pname, char *ptype, char *args)
+static void __send_fail_signal(backend_info *info)
 {
-       DBG("send_fail_signal start\n");
-       gboolean ret_parse;
-       gint argcp;
-       gchar **argvp;
-       GError *gerr = NULL;
+       int req_type;
        pkgmgr_installer *pi;
        pi = pkgmgr_installer_new();
        if (!pi) {
-               DBG("Failure in creating the pkgmgr_installer object");
+               ERR("Failure in creating the pkgmgr_installer object");
                return;
        }
-       ret_parse = g_shell_parse_argv(args,
-                                      &argcp, &argvp, &gerr);
-       if (FALSE == ret_parse) {
-               DBG("Failed to split args: %s", args);
-               DBG("messsage: %s", gerr->message);
-               pkgmgr_installer_free(pi);
-               return;
+       pkgmgr_installer_set_session_id(pi, info->req_id);
+       switch(info->req_type) {
+       case PKGMGR_REQUEST_TYPE_INSTALL:
+       case PKGMGR_REQUEST_TYPE_MOUNT_INSTALL:
+       case PKGMGR_REQUEST_TYPE_REINSTALL:
+               req_type = PKGMGR_REQ_INSTALL;
+               break;
+       case PKGMGR_REQUEST_TYPE_UNINSTALL:
+               req_type = PKGMGR_REQ_UNINSTALL;
+               break;
+       case PKGMGR_REQUEST_TYPE_MOVE:
+               req_type = PKGMGR_REQ_MOVE;
+               break;
+       case PKGMGR_REQUEST_TYPE_GETSIZE:
+               req_type = PKGMGR_REQ_GETSIZE;
+               break;
+       default:
+               req_type = PKGMGR_REQ_INVALID;
+               break;
        }
-
-       pkgmgr_installer_receive_request(pi, argcp, argvp);
-       pkgmgr_installer_send_signal(pi, ptype, pname, "end", "fail");
+       pkgmgr_installer_set_request_type(pi, req_type);
+       pkgmgr_installer_send_signal(pi, info->pkgtype, info->pkgid, "end", "fail");
        pkgmgr_installer_free(pi);
        return;
 }
@@ -227,8 +234,11 @@ static gboolean pipe_io_handler(GIOChannel *io, GIOCondition cond, gpointer data
        }
 
        __set_backend_free(x);
-       if (WIFSIGNALED(info.status) || WEXITSTATUS(info.status)) {
-               send_fail_signal(ptr->pkgid, ptr->pkgtype, ptr->args);
+       if (WIFSIGNALED(info.status)) {
+               __send_fail_signal(ptr);
+               DBG("backend[%s] exit with signal[%d]", ptr->pkgtype,
+                               WTERMSIG(info.status));
+       } else if (WEXITSTATUS(info.status)) {
                DBG("backend[%s] exit with error", ptr->pkgtype);
        } else {
                DBG("backend[%s] exit", ptr->pkgtype);
@@ -1301,11 +1311,13 @@ gboolean queue_job(void *data)
                return FALSE;
 
        /*save pkg type and pkg name for future*/
-       strncpy(ptr->pkgtype, item->pkg_type, MAX_PKG_TYPE_LEN-1);
-       strncpy(ptr->pkgid, item->pkgid, MAX_PKG_NAME_LEN-1);
-       strncpy(ptr->args, item->args, MAX_PKG_ARGS_LEN-1);
-       memset((item->appid),0,MAX_PKG_NAME_LEN);
+       strncpy(ptr->req_id, item->req_id, MAX_REQ_ID_LEN - 1);
+       strncpy(ptr->pkgtype, item->pkg_type, MAX_PKG_TYPE_LEN - 1);
+       strncpy(ptr->pkgid, item->pkgid, MAX_PKG_NAME_LEN - 1);
+       strncpy(ptr->args, item->args, MAX_PKG_ARGS_LEN - 1);
+       memset((item->appid), 0, MAX_PKG_NAME_LEN);
        ptr->uid = item->uid;
+       ptr->req_type = item->req_type;
        DBG("handle request type [%d]", item->req_type);
 
        switch (item->req_type) {