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) {
_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;
}
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");
gsize len;
struct signalfd_siginfo fdsi;
struct backend_job *job;
+ struct getsize_sync_extra_info *extra_getsize_info;
pid_t pid;
int status;
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);
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,
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:
#include <glib.h>
+#include "pkgmgrinfo_type.h"
+#include "pkgmgr-info.h"
#include "pkgmgr-server.h"
#include "queue.h"
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;
}
}
free(job->pkgid);
free(job->appid);
free(job->args);
- if (job->extra_data)
- free(job->extra_data);
free(job);
}