From 541f912da75d75b2e41eeb680e53e9b29600474d Mon Sep 17 00:00:00 2001 From: Regis Merlino Date: Thu, 4 Apr 2013 17:31:27 +0200 Subject: [Device] Fix nested gupnp service calls Signed-off-by: Regis Merlino --- libdleyna/server/device.c | 54 ++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/libdleyna/server/device.c b/libdleyna/server/device.c index ce86a56..1669345 100644 --- a/libdleyna/server/device.c +++ b/libdleyna/server/device.c @@ -1500,13 +1500,13 @@ static void prv_get_system_update_id_for_prop(GUPnPServiceProxy *proxy, goto on_complete; } - gupnp_service_proxy_begin_action(proxy, "GetSystemUpdateID", - prv_system_update_id_for_prop_cb, - cb_data, - NULL); + cb_data->action = gupnp_service_proxy_begin_action( + proxy, "GetSystemUpdateID", + prv_system_update_id_for_prop_cb, + cb_data, + NULL); cb_data->proxy = proxy; - g_object_add_weak_pointer((G_OBJECT(proxy)), (gpointer *)&cb_data->proxy); @@ -1595,17 +1595,22 @@ static void prv_get_system_update_id_for_props(GUPnPServiceProxy *proxy, goto on_complete; } - gupnp_service_proxy_begin_action(proxy, "GetSystemUpdateID", - prv_system_update_id_for_props_cb, - cb_data, - NULL); + cb_data->action = gupnp_service_proxy_begin_action( + proxy, "GetSystemUpdateID", + prv_system_update_id_for_props_cb, + cb_data, + NULL); - cb_data->proxy = proxy; + if (cb_data->proxy != NULL) + g_object_remove_weak_pointer((G_OBJECT(cb_data->proxy)), + (gpointer *)&cb_data->proxy); + cb_data->proxy = proxy; g_object_add_weak_pointer((G_OBJECT(proxy)), (gpointer *)&cb_data->proxy); - cb_data->cancel_id = g_cancellable_connect( + if (!cb_data->cancel_id) + cb_data->cancel_id = g_cancellable_connect( cb_data->cancellable, G_CALLBACK(dls_async_task_cancelled_cb), cb_data, NULL); @@ -1698,13 +1703,13 @@ static void prv_get_sr_token_for_prop(GUPnPServiceProxy *proxy, goto on_error; } - gupnp_service_proxy_begin_action(proxy, "GetServiceResetToken", - prv_service_reset_for_prop_cb, - cb_data, - NULL); + cb_data->action = gupnp_service_proxy_begin_action( + proxy, "GetServiceResetToken", + prv_service_reset_for_prop_cb, + cb_data, + NULL); cb_data->proxy = proxy; - g_object_add_weak_pointer((G_OBJECT(proxy)), (gpointer *)&cb_data->proxy); @@ -1786,17 +1791,22 @@ static void prv_get_sr_token_for_props(GUPnPServiceProxy *proxy, goto on_complete; /* No error here, just skip the property */ } - gupnp_service_proxy_begin_action(proxy, "GetServiceResetToken", - prv_service_reset_for_props_cb, - cb_data, - NULL); + cb_data->action = gupnp_service_proxy_begin_action( + proxy, "GetServiceResetToken", + prv_service_reset_for_props_cb, + cb_data, + NULL); - cb_data->proxy = proxy; + if (cb_data->proxy != NULL) + g_object_remove_weak_pointer((G_OBJECT(cb_data->proxy)), + (gpointer *)&cb_data->proxy); + cb_data->proxy = proxy; g_object_add_weak_pointer((G_OBJECT(proxy)), (gpointer *)&cb_data->proxy); - cb_data->cancel_id = g_cancellable_connect( + if (!cb_data->cancel_id) + cb_data->cancel_id = g_cancellable_connect( cb_data->cancellable, G_CALLBACK(dls_async_task_cancelled_cb), cb_data, NULL); -- cgit v1.2.1