client: use async call instead of sync call 01/108901/1
authorSangjung Woo <sangjung.woo@samsung.com>
Fri, 6 Jan 2017 07:02:48 +0000 (16:02 +0900)
committerSangjung Woo <sangjung.woo@samsung.com>
Fri, 6 Jan 2017 07:02:48 +0000 (16:02 +0900)
In order to improve the performance when updating the CAN related data,
this patch uses the DBus async method since it returns immediately
without checking the result.

Change-Id: I8aca4cb4c6774c1d29a6e5229d72ed4d9314e4d4
Signed-off-by: Sangjung Woo <sangjung.woo@samsung.com>
lib/client/libamb-client.c

index 962f086..cba7a7d 100644 (file)
@@ -195,6 +195,42 @@ static GVariant *get_all(GDBusProxy *proxy, const char *name)
        return ret;
 }
 
+static void cb_pending(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
+{
+       GVariant *ret;
+       GError *err;
+
+       err = NULL;
+       ret = g_dbus_proxy_call_finish(proxy, res, &err);
+       if (!ret) {
+               DEBUGOUT("%s: %s\n", __func__, err->message);
+               g_clear_error(&err);
+       }
+
+       g_variant_unref(ret);
+}
+
+static int set_prop_async(GDBusProxy *proxy, const char *name, const char *prop_name, GVariant *value)
+{
+       gchar *obj_name;
+
+       obj_name = g_strdup_printf("org.automotive.%s", name);
+       if (!obj_name)
+               return -ENOMEM;
+
+       g_dbus_proxy_call(proxy,
+                               "Set",
+                               g_variant_new("(ssv)", obj_name, prop_name, value),
+                               G_DBUS_CALL_FLAGS_NONE,
+                               -1,
+                               NULL,
+                               (GAsyncReadyCallback)cb_pending,
+                               NULL);
+
+       g_free(obj_name);
+       return 0;
+}
+
 static int set_prop(GDBusProxy *proxy, const char *name, const char *prop_name, GVariant *value)
 {
        GError *err;
@@ -391,7 +427,7 @@ EXPORT int amb_set_property(const char *obj_name, const char *prop_name, ZoneTyp
                return -EINVAL;
        }
 
-       ret = set_prop(objproxy, obj_name, prop_name, value);
+       ret = set_prop_async(objproxy, obj_name, prop_name, value);
        if (ret != 0) {
                g_object_unref(objproxy);
                return ret;