summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinsun.pyo <insun.pyo@samsung.com>2018-03-02 00:57:28 +0900
committerINSUN PYO <insun.pyo@samsung.com>2018-03-06 17:33:27 +0900
commitc214a862ff4bc251d77faa444230e1c3ca54afe5 (patch)
tree73f38189ff3934f66d5dddf4060e55bb1d5b2cc5
parent4321bf040bb53a155a4bcc2282a26a84769a963f (diff)
downloaddeviced-c214a862ff4bc251d77faa444230e1c3ca54afe5.tar.gz
deviced-c214a862ff4bc251d77faa444230e1c3ca54afe5.tar.bz2
deviced-c214a862ff4bc251d77faa444230e1c3ca54afe5.zip
tzip: add async call
Signed-off-by: insun.pyo <insun.pyo@samsung.com> Change-Id: I3431b65612b22ca6a8c66ca9263286ddfa5a9178
-rw-r--r--src/tzip/tzip.c70
1 files changed, 56 insertions, 14 deletions
diff --git a/src/tzip/tzip.c b/src/tzip/tzip.c
index b73fe985..9541e034 100644
--- a/src/tzip/tzip.c
+++ b/src/tzip/tzip.c
@@ -758,15 +758,15 @@ out_unlock:
return ret;
}
-static GVariant *dbus_request_mount_tzip(GDBusConnection *conn,
- const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
- GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data)
+static GVariant *dbus_request_mount_tzip_internal(GDBusConnection *conn, const gchar *sender, GVariant *param,
+ GDBusMethodInvocation *invocation, bool sync)
{
int ret;
pid_t pid;
char *smack;
char *zippath;
char *mountpath;
+ GVariant *result;
struct tzip_msg_data *msgdata = NULL;
tzip_server_init();
@@ -808,32 +808,38 @@ static GVariant *dbus_request_mount_tzip(GDBusConnection *conn,
msgdata->smack = strdup(smack);
msgdata->zippath = strdup(zippath);
msgdata->mountpath = strdup(mountpath);
- msgdata->invocation = invocation;
if (!msgdata->smack || !msgdata->zippath || !msgdata->mountpath) {
_E("Malloc failed");
ret = -ENOMEM;
goto out;
}
- g_async_queue_push(async_queue, (gpointer)msgdata);
ret = 0;
+ if (sync) {
+ result = NULL;
+ msgdata->invocation = invocation;
+ } else
+ result = g_variant_new("(i)", ret);
+
+ g_async_queue_push(async_queue, (gpointer)msgdata);
+
out:
if (ret < 0) {
free_tzip_msg_data(msgdata);
- return g_variant_new("(i)", ret);
+ result = g_variant_new("(i)", ret);
}
- return NULL;
+ return result;
}
-static GVariant *dbus_request_unmount_tzip(GDBusConnection *conn,
- const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
- GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data)
+static GVariant *dbus_request_unmount_tzip_internal(GDBusConnection *conn, const gchar *sender, GVariant *param,
+ GDBusMethodInvocation *invocation, bool sync)
{
int ret;
pid_t pid;
char *mountpath;
+ GVariant *result;
struct tzip_msg_data *msgdata = NULL;
tzip_server_init();
@@ -873,23 +879,57 @@ static GVariant *dbus_request_unmount_tzip(GDBusConnection *conn,
msgdata->type = 'u';
msgdata->mountpath = strdup(mountpath);
- msgdata->invocation = invocation;
if (!msgdata->mountpath) {
_E("Malloc failed");
ret = -ENOMEM;
goto out;
}
- g_async_queue_push(async_queue, (gpointer)msgdata);
ret = 0;
+ if (sync) {
+ result = NULL;
+ msgdata->invocation = invocation;
+ } else
+ result = g_variant_new("(i)", ret);
+
+ g_async_queue_push(async_queue, (gpointer)msgdata);
+
out:
if (ret < 0) {
free_tzip_msg_data(msgdata);
- return g_variant_new("(i)", ret);
+ result = g_variant_new("(i)", ret);
}
- return NULL;
+ return result;
+}
+
+static GVariant *dbus_request_mount_tzip(GDBusConnection *conn,
+ const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
+ GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data)
+{
+ return dbus_request_mount_tzip_internal(conn, sender, param, invocation, false);
+}
+
+static GVariant *dbus_request_unmount_tzip(GDBusConnection *conn,
+ const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
+ GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data)
+{
+ return dbus_request_unmount_tzip_internal(conn, sender, param, invocation, false);
+}
+
+static GVariant *dbus_request_mount_sync_tzip(GDBusConnection *conn,
+ const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
+ GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data)
+{
+ return dbus_request_mount_tzip_internal(conn, sender, param, invocation, true);
+}
+
+static GVariant *dbus_request_unmount_sync_tzip(GDBusConnection *conn,
+ const gchar *sender, const gchar *path, const gchar *iface, const gchar *name,
+ GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data)
+{
+ return dbus_request_unmount_tzip_internal(conn, sender, param, invocation, true);
}
static GVariant *dbus_request_ismounted_tzip(GDBusConnection *conn,
@@ -951,6 +991,8 @@ out:
static const dbus_method_s dbus_methods[] = {
{ "Mount", "sss", "i", dbus_request_mount_tzip },
{ "Unmount", "s", "i", dbus_request_unmount_tzip },
+ { "MountSync", "sss", "i", dbus_request_mount_sync_tzip },
+ { "UnmountSync", "s", "i", dbus_request_unmount_sync_tzip },
{ "IsMounted", "s", "i", dbus_request_ismounted_tzip },
/* Add methods here */
};