All pastes #161282 Raw Edit

Someone

public text v1 · immutable
·published 2006-09-05 07:20 UTC
rendered paste body
diff --git a/dbus/dbus-gproxy.c b/dbus/dbus-gproxy.c
index bd8ab20..f2ea794 100644
--- a/dbus/dbus-gproxy.c
+++ b/dbus/dbus-gproxy.c
@@ -664,6 +664,10 @@ unassociate_proxies (gpointer key, gpoin
          else
            {
              data->destroyed = g_slist_prepend (data->destroyed, proxy);
+              /* make contents of list into weak pointers in case the objects
+               * unref each other when disposing */
+              g_object_add_weak_pointer (G_OBJECT (proxy),
+                  &(data->destroyed->data));
            }
        }
     }
@@ -740,8 +744,12 @@ dbus_g_proxy_manager_replace_name_owner

          UNLOCK_MANAGER (manager);

+          /* the destroyed list's data pointers are weak pointers, so that we
+           * don't end up calling destroy on proxies which have already been
+           * freed up as a result of other ones being destroyed */
          for (tmp = data.destroyed; tmp; tmp = tmp->next)
-           dbus_g_proxy_destroy (tmp->data);
+            if (tmp->data != NULL)
+             dbus_g_proxy_destroy (tmp->data);
          g_slist_free (data.destroyed);

          LOCK_MANAGER (manager);