From e22c6e05e9ebc6cce941762020c5710b8014677b Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 18 Mar 2011 20:17:47 +0100 Subject: Imported Upstream version 0.8.3.998 --- src/NetworkManagerUtils.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'src/NetworkManagerUtils.c') diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index 10240960..3a28467c 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -370,6 +370,13 @@ nm_utils_merge_ip6_config (NMIP6Config *ip6_config, NMSettingIP6Config *setting) nm_ip6_config_set_never_default (ip6_config, TRUE); } +static void +dispatcher_done_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data) +{ + dbus_g_proxy_end_call (proxy, call, NULL, G_TYPE_INVALID); + g_object_unref (proxy); +} + void nm_utils_call_dispatcher (const char *action, NMConnection *connection, @@ -448,18 +455,25 @@ nm_utils_call_dispatcher (const char *action, value_hash_add_object_path (device_props, NMD_DEVICE_PROPS_PATH, nm_device_get_path (device)); } - dbus_g_proxy_call_no_reply (proxy, "Action", - G_TYPE_STRING, action, - DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, connection_hash, - DBUS_TYPE_G_MAP_OF_VARIANT, connection_props, - DBUS_TYPE_G_MAP_OF_VARIANT, device_props, - G_TYPE_INVALID); - - g_object_unref (proxy); + /* Do a non-blocking call, but wait for the reply, because dbus-glib + * sometimes needs time to complete internal housekeeping. If we use + * dbus_g_proxy_call_no_reply(), that housekeeping (specifically the + * GetNameOwner response) doesn't complete and we run into an assert + * on unreffing the proxy. + */ + dbus_g_proxy_begin_call_with_timeout (proxy, "Action", + dispatcher_done_cb, + dbus_mgr, + g_object_unref, + 5000, + G_TYPE_STRING, action, + DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, connection_hash, + DBUS_TYPE_G_MAP_OF_VARIANT, connection_props, + DBUS_TYPE_G_MAP_OF_VARIANT, device_props, + G_TYPE_INVALID); g_hash_table_destroy (connection_hash); g_hash_table_destroy (connection_props); g_hash_table_destroy (device_props); - g_object_unref (dbus_mgr); } gboolean -- cgit 1.3.0-6-gf8a5