#include "app2sd_client_interface.h"
#include "app2ext_utils.h"
+#define CONNECTION_RETRY_MAX 5
+#define CONNECTION_WAIT_USEC (1000000 / 2) /* 0.5 sec */
+
static int app2sd_gdbus_shared_connection(GDBusConnection **connection)
{
GError *error = NULL;
{
int ret = APP2EXT_SUCCESS;
int result = 0;
+ int retry_cnt = 0;
GDBusConnection *conn = NULL;
GDBusProxy *proxy = NULL;
GError *error = NULL;
}
/* method call */
- proxy = g_dbus_proxy_new_sync(conn,
- G_DBUS_PROXY_FLAGS_NONE, NULL,
- APP2SD_BUS_NAME, APP2SD_OBJECT_PATH, APP2SD_INTERFACE_NAME,
- NULL, &error);
- if (proxy == NULL) {
- _E("failed to create new proxy, error(%s)", error->message);
- g_error_free(error);
- ret = APP2EXT_ERROR_DBUS_FAILED;
- goto out;
- }
+ do {
+ proxy = g_dbus_proxy_new_sync(conn,
+ G_DBUS_PROXY_FLAGS_NONE, NULL,
+ APP2SD_BUS_NAME, APP2SD_OBJECT_PATH,
+ APP2SD_INTERFACE_NAME,
+ NULL, &error);
+ if (proxy == NULL) {
+ _E("failed to create new proxy, error(%s)",
+ error->message);
+ g_error_free(error);
+ ret = APP2EXT_ERROR_DBUS_FAILED;
+ retry_cnt++;
+ usleep(CONNECTION_WAIT_USEC);
+ continue;
+ }
- value = g_dbus_proxy_call_sync(proxy, method_name, param,
- G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, &error);
- if (error != NULL) {
- _E("proxy call sync error(%s)", error->message);
- g_error_free(error);
- ret = APP2EXT_ERROR_DBUS_FAILED;
- goto out;
- }
+ value = g_dbus_proxy_call_sync(proxy, method_name, param,
+ G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, &error);
+ g_object_unref(proxy);
+ if (error != NULL) {
+ _E("proxy call sync error(%s)", error->message);
+ g_error_free(error);
+ ret = APP2EXT_ERROR_DBUS_FAILED;
+ retry_cnt++;
+ usleep(CONNECTION_WAIT_USEC);
+ continue;
+ }
+
+ g_variant_get(value, "(i)", &result);
+ g_variant_unref(value);
- g_variant_get(value, "(i)", &result);
- g_variant_unref(value);
+ _D("result(%d)", result);
+ if (result)
+ ret = result;
- _D("result(%d)", result);
- if (result)
- ret = result;
+ break;
+ } while (retry_cnt <= CONNECTION_RETRY_MAX);
-out:
if (conn)
g_object_unref(conn);