From 009729203455b9339ff19354d1f6c592e18d1ee0 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Mon, 8 May 2017 09:19:38 +0900 Subject: [PATCH] Refactoring updateinfo related codes - Remove unused codes - Refactoring extra data type for several request type Change-Id: I60787d11d32d738235db763183c1218926bc80b4 Signed-off-by: Junghyun Yeon --- include/queue.h | 3 +-- src/pkgmgr-server.c | 53 ++++++++++++++++++++++++++++++++--------------------- src/queue.c | 39 +++++++++++++++++++++++++++------------ src/request.c | 16 ---------------- 4 files changed, 60 insertions(+), 51 deletions(-) diff --git a/include/queue.h b/include/queue.h index 7d76a09..07dd26f 100644 --- a/include/queue.h +++ b/include/queue.h @@ -20,7 +20,7 @@ #include -struct job_extra_info { +struct getsize_sync_extra_info{ int getsize_fd; char *getsize_fifo; GIOChannel *getsize_io; @@ -37,7 +37,6 @@ struct backend_job { int backend_slot; char *backend_type; char *backend_path; - struct job_extra_info *extra; void *extra_data; }; diff --git a/src/pkgmgr-server.c b/src/pkgmgr-server.c index 7f6a2ae..f820631 100644 --- a/src/pkgmgr-server.c +++ b/src/pkgmgr-server.c @@ -122,6 +122,8 @@ static gboolean getsize_io_handler(GIOChannel *io, GIOCondition cond, char buf[MAX_LONGLONG_LENGTH]; long long result = 0; struct backend_job *job = (struct backend_job *)data; + struct getsize_sync_extra_info *extra_getsize_info = + (struct getsize_sync_extra_info *)job->extra_data; s = g_io_channel_read_chars(io, (gchar *)buf, sizeof(buf), &len, &err); if (s != G_IO_STATUS_NORMAL) { @@ -140,9 +142,9 @@ static gboolean getsize_io_handler(GIOChannel *io, GIOCondition cond, _return_value_to_caller(job->req_id, g_variant_new("(ix)", (result < 0) ? PKGMGR_R_ERROR : PKGMGR_R_OK, result)); - unlink(job->extra->getsize_fifo); - free(job->extra->getsize_fifo); - job->extra->getsize_fifo = NULL; + unlink(extra_getsize_info->getsize_fifo); + free(extra_getsize_info->getsize_fifo); + extra_getsize_info->getsize_fifo = NULL; return FALSE; } @@ -150,21 +152,24 @@ static gboolean getsize_io_handler(GIOChannel *io, GIOCondition cond, static int __setup_size_info_io(struct backend_job *job) { guint getsize_wid; + struct getsize_sync_extra_info *extra_getsize_info = + (struct getsize_sync_extra_info *)job->extra_data; - job->extra->getsize_fd = open(job->extra->getsize_fifo, + extra_getsize_info->getsize_fd = open(extra_getsize_info->getsize_fifo, O_RDONLY | O_NONBLOCK); - if (job->extra->getsize_fd < 0) { + if (extra_getsize_info->getsize_fd < 0) { ERR("failed to open the fifo(%s), errno(%d)", - job->extra->getsize_fifo, errno); + extra_getsize_info->getsize_fifo, errno); return -1; } - job->extra->getsize_io = g_io_channel_unix_new(job->extra->getsize_fd); - if (!job->extra->getsize_io) + extra_getsize_info->getsize_io = + g_io_channel_unix_new(extra_getsize_info->getsize_fd); + if (!extra_getsize_info->getsize_io) return -1; - g_io_channel_set_encoding(job->extra->getsize_io, NULL, NULL); - g_io_channel_set_buffered(job->extra->getsize_io, FALSE); - getsize_wid = g_io_add_watch(job->extra->getsize_io, + g_io_channel_set_encoding(extra_getsize_info->getsize_io, NULL, NULL); + g_io_channel_set_buffered(extra_getsize_info->getsize_io, FALSE); + getsize_wid = g_io_add_watch(extra_getsize_info->getsize_io, G_IO_IN, getsize_io_handler, job); if (!getsize_wid) { ERR("failed to add io watch"); @@ -182,6 +187,7 @@ static gboolean __signal_handler(GIOChannel *io, GIOCondition cond, gsize len; struct signalfd_siginfo fdsi; struct backend_job *job; + struct getsize_sync_extra_info *extra_getsize_info; pid_t pid; int status; @@ -213,15 +219,17 @@ static gboolean __signal_handler(GIOChannel *io, GIOCondition cond, INFO("backend[%s][%d] exit", job->backend_type, pid); } - if (job->extra) { - if (job->extra->getsize_fifo) { + if (job->req_type == REQUEST_TYPE_GETSIZE_SYNC && + job->extra_data) { + extra_getsize_info = + (struct getsize_sync_extra_info *)job->extra_data; + if (extra_getsize_info->getsize_fifo) { ERR("invalid backend close"); _return_value_to_caller(job->req_id, - g_variant_new("(ix)", PKGMGR_R_ERROR, - -1)); + g_variant_new("(ix)", + PKGMGR_R_ERROR, -1)); } } - g_hash_table_remove(backend_info_table, (gconstpointer)pid); } g_idle_add(queue_job, NULL); @@ -1182,27 +1190,29 @@ static int __process_getsize_sync(struct backend_job *job) char **argv; char args[MAX_PKG_ARGS_LEN]; char fifo_path[PATH_MAX]; + struct getsize_sync_extra_info *extra_getsize_info; int pid; snprintf(fifo_path, sizeof(fifo_path), "/tmp/pkgmgr/%s", job->req_id); - job->extra = calloc(1, sizeof(struct job_extra_info)); - if (!job->extra) { + extra_getsize_info = calloc(1, sizeof(struct getsize_sync_extra_info)); + if (!extra_getsize_info) { ERR("memory alloc failed"); goto error; } - job->extra->getsize_fifo = strdup(fifo_path); - if (!job->extra->getsize_fifo) { + extra_getsize_info->getsize_fifo = strdup(fifo_path); + if (!extra_getsize_info->getsize_fifo) { ERR("out of memory"); goto error; } - if (mkfifo(job->extra->getsize_fifo, 0600) < 0) { + if (mkfifo(extra_getsize_info->getsize_fifo, 0600) < 0) { ERR("failed to mkfifo"); goto error; } + job->extra_data = extra_getsize_info; snprintf(args, sizeof(args), "%s %s %s %d -k %s -u %d --sync", backend_cmd, job->pkgid, job->args, job->caller_uid, @@ -1644,6 +1654,7 @@ gboolean queue_job(void *data) break; case REQUEST_TYPE_REGISTER_PKG_UPDATE_INFO: ret = __process_register_pkg_update_info(job); + __free_extra_info(job); _free_backend_job(job); break; case REQUEST_TYPE_UNREGISTER_PKG_UPDATE_INFO: diff --git a/src/queue.c b/src/queue.c index e70e774..61220c8 100644 --- a/src/queue.c +++ b/src/queue.c @@ -27,6 +27,8 @@ #include +#include "pkgmgrinfo_type.h" +#include "pkgmgr-info.h" #include "pkgmgr-server.h" #include "queue.h" @@ -166,17 +168,32 @@ static gboolean __str_equal(gconstpointer v1, gconstpointer v2) void __free_extra_info(struct backend_job *job) { - if (job->extra) { - if (job->extra->getsize_io) - g_io_channel_unref(job->extra->getsize_io); - if (job->extra->getsize_fd) - close(job->extra->getsize_fd); - if (job->extra->getsize_fifo) { - unlink(job->extra->getsize_fifo); - free(job->extra->getsize_fifo); + struct getsize_sync_extra_info *getsize_sync_data; + pkgmgrinfo_updateinfo_h update_info; + + switch (job->req_type) { + case REQUEST_TYPE_GETSIZE_SYNC: + getsize_sync_data = (struct getsize_sync_extra_info *)job->extra_data; + if (!getsize_sync_data) + break; + if (getsize_sync_data->getsize_io) + g_io_channel_unref(getsize_sync_data->getsize_io); + if (getsize_sync_data->getsize_fd) + close(getsize_sync_data->getsize_fd); + if (getsize_sync_data->getsize_fifo) { + unlink(getsize_sync_data->getsize_fifo); + free(getsize_sync_data->getsize_fifo); } - free(job->extra); - job->extra = NULL; + free(getsize_sync_data); + job->extra_data = NULL; + break; + case REQUEST_TYPE_REGISTER_PKG_UPDATE_INFO: + update_info = (pkgmgrinfo_updateinfo_h)job->extra_data; + if (!update_info) + break; + pkgmgrinfo_updateinfo_destroy(update_info); + job->extra_data = NULL; + break; } } @@ -187,8 +204,6 @@ void _free_backend_job(struct backend_job *job) free(job->pkgid); free(job->appid); free(job->args); - if (job->extra_data) - free(job->extra_data); free(job); } diff --git a/src/request.c b/src/request.c index b9db7e0..fe31de8 100644 --- a/src/request.c +++ b/src/request.c @@ -657,22 +657,6 @@ static int __handle_request_enable_pkgs(uid_t caller_uid, return 0; } -static int __convert_updateinfo_type(const char *type, pkgmgrinfo_updateinfo_update_type *converted_type) -{ - if (type == NULL || converted_type == NULL) - return -1; - - if (strncmp(type, PMINFO_UPDATEINFO_TYPE_NONE, strlen(PMINFO_UPDATEINFO_TYPE_NONE)) == 0) - *converted_type = PMINFO_UPDATEINFO_NONE; - else if (strncmp(type, PMINFO_UPDATEINFO_TYPE_FORCE, strlen(PMINFO_UPDATEINFO_TYPE_FORCE)) == 0) - *converted_type = PMINFO_UPDATEINFO_FORCE; - else if (strncmp(type, PMINFO_UPDATEINFO_TYPE_OPTIONAL, strlen(PMINFO_UPDATEINFO_TYPE_OPTIONAL)) == 0) - *converted_type = PMINFO_UPDATEINFO_OPTIONAL; - else - return -1; - return 0; -} - static int __handle_request_register_pkg_update_info( uid_t caller_uid, GDBusMethodInvocation *invocation, GVariant *parameters) -- 2.7.4