fix the problem when structures are destoried, repeatedly
[platform/core/iot/iotcon.git] / lib / icl-device.c
index 15ccd47..4a12c24 100644 (file)
@@ -125,6 +125,7 @@ static gboolean _icl_timeout_get_device_info(gpointer p)
                cb_container->cb(&info, IOTCON_ERROR_TIMEOUT, cb_container->user_data);
 
        icl_dbus_unsubscribe_signal(cb_container->id);
+       cb_container->id = 0;
 
        return G_SOURCE_REMOVE;
 }
@@ -134,7 +135,7 @@ API int iotcon_get_device_info(const char *host_address,
                iotcon_device_info_cb cb,
                void *user_data)
 {
-       int ret;
+       int ret, timeout;
        unsigned int sub_id;
        GError *error = NULL;
        icl_device_info_s *cb_container;
@@ -144,9 +145,12 @@ API int iotcon_get_device_info(const char *host_address,
        RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
        RETV_IF(NULL == cb, IOTCON_ERROR_INVALID_PARAMETER);
 
+       timeout = icl_dbus_get_timeout();
+
        ic_dbus_call_get_device_info_sync(icl_dbus_get_object(),
                        ic_utils_dbus_encode_str(host_address),
                        connectivity_type,
+                       timeout,
                        &signal_number,
                        &ret,
                        NULL,
@@ -185,7 +189,7 @@ API int iotcon_get_device_info(const char *host_address,
 
        cb_container->id = sub_id;
 
-       cb_container->timeout_id = g_timeout_add_seconds(icl_dbus_get_timeout(),
+       cb_container->timeout_id = g_timeout_add_seconds(timeout,
                        _icl_timeout_get_device_info, cb_container);
 
        return ret;
@@ -301,6 +305,7 @@ static gboolean _icl_timeout_get_platform_info(gpointer p)
                cb_container->cb(&info, IOTCON_ERROR_TIMEOUT, cb_container->user_data);
 
        icl_dbus_unsubscribe_signal(cb_container->id);
+       cb_container->id = 0;
 
        return G_SOURCE_REMOVE;
 }
@@ -310,7 +315,7 @@ API int iotcon_get_platform_info(const char *host_address,
                iotcon_platform_info_cb cb,
                void *user_data)
 {
-       int ret;
+       int ret, timeout;
        unsigned int sub_id;
        GError *error = NULL;
        icl_platform_info_s *cb_container;
@@ -320,9 +325,12 @@ API int iotcon_get_platform_info(const char *host_address,
        RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
        RETV_IF(NULL == cb, IOTCON_ERROR_INVALID_PARAMETER);
 
+       timeout = icl_dbus_get_timeout();
+
        ic_dbus_call_get_platform_info_sync(icl_dbus_get_object(),
                        ic_utils_dbus_encode_str(host_address),
                        connectivity_type,
+                       timeout,
                        &signal_number,
                        &ret,
                        NULL,
@@ -360,7 +368,7 @@ API int iotcon_get_platform_info(const char *host_address,
        }
 
        cb_container->id = sub_id;
-       cb_container->timeout_id = g_timeout_add_seconds(icl_dbus_get_timeout(),
+       cb_container->timeout_id = g_timeout_add_seconds(timeout,
                        _icl_timeout_get_platform_info, cb_container);
 
        return ret;