pidgin/pidgin

Parents 68d77b0e8ea6
Children 097401c7b4f3
Make PurpleAccount take ownership of the connection that was set.

This should fix the infinite loop on exit.

Testing Done:
Connected an IRC account and was unable to trigger the infinite loop.

Reviewed at https://reviews.imfreedom.org/r/1496/
--- a/libpurple/account.c Thu Jun 09 03:01:29 2022 -0500
+++ b/libpurple/account.c Thu Jun 09 03:04:16 2022 -0500
@@ -1159,7 +1159,6 @@
void
purple_account_disconnect(PurpleAccount *account)
{
- PurpleConnection *gc;
PurpleAccountPrivate *priv;
const char *username;
@@ -1175,8 +1174,6 @@
priv->disconnecting = TRUE;
- gc = purple_account_get_connection(account);
- g_object_unref(gc);
purple_account_set_connection(account, NULL);
priv->disconnecting = FALSE;
@@ -1559,6 +1556,8 @@
g_return_if_fail(PURPLE_IS_ACCOUNT(account));
priv = purple_account_get_instance_private(account);
+
+ g_clear_object(&priv->gc);
priv->gc = gc;
g_object_notify_by_pspec(G_OBJECT(account), properties[PROP_CONNECTION]);
--- a/libpurple/connection.c Thu Jun 09 03:01:29 2022 -0500
+++ b/libpurple/connection.c Thu Jun 09 03:04:16 2022 -0500
@@ -745,7 +745,6 @@
static void
purple_connection_constructed(GObject *object) {
PurpleConnection *gc = PURPLE_CONNECTION(object);
- PurpleAccount *account;
G_OBJECT_CLASS(purple_connection_parent_class)->constructed(object);
@@ -757,9 +756,7 @@
g_free(uuid);
}
- g_object_get(gc, "account", &account, NULL);
- purple_account_set_connection(account, gc);
- g_object_unref(account);
+ purple_account_set_connection(gc->account, gc);
purple_signal_emit(purple_connections_get_handle(), "signing-on", gc);
}