/pidgin/main: 53c9ebedf2b7: Plug g_resolver_get_default() leaks
Mike Ruprecht <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 53c9ebedf2b785f8e22444c4c00be97318329ffb Author: Mike Ruprecht <[email protected]> Date: 2016-01-07 21:06 -0600 Branch: default URL: https://hg.pidgin.im/pidgin/main/rev/53c9ebedf2b7 Description: Plug g_resolver_get_default() leaks g_resolver_get_default() returns a new reference to the default GResolver. The g_resolver_lookup_*_async() functions hold onto an additional reference during their lookup operations. Therefore this patch unrefs the GResolver right after the g_resolver_lookup_*_async() functions are called. diffstat: libpurple/network.c | 8 ++++++-- libpurple/protocols/gg/resolver-purple.c | 6 +++++- libpurple/protocols/jabber/disco.c | 4 +++- libpurple/protocols/jabber/google/jingleinfo.c | 5 ++++- libpurple/protocols/jabber/jabber.c | 8 ++++++-- libpurple/protocols/simple/simple.c | 12 +++++++++--- libpurple/protocols/yahoo/yahoo_filexfer.c | 5 ++++- libpurple/proxy.c | 10 ++++++++-- libpurple/stun.c | 10 ++++++++-- 9 files changed, 53 insertions(+), 15 deletions(-) diffs (truncated from 317 to 300 lines): diff --git a/libpurple/network.c b/libpurple/network.c --- a/libpurple/network.c +++ b/libpurple/network.c @@ -599,11 +599,13 @@ purple_network_set_stun_server(const gch { if (stun_server && stun_server[0] != '\0') { if (purple_network_is_available()) { - g_resolver_lookup_by_name_async(g_resolver_get_default(), + GResolver *resolver = g_resolver_get_default(); + g_resolver_lookup_by_name_async(resolver, stun_server, NULL, purple_network_ip_lookup_cb, &stun_ip); + g_object_unref(resolver); } else { purple_debug_info("network", "network is unavailable, don't try to update STUN IP"); @@ -619,11 +621,13 @@ purple_network_set_turn_server(const gch { if (turn_server && turn_server[0] != '\0') { if (purple_network_is_available()) { - g_resolver_lookup_by_name_async(g_resolver_get_default(), + GResolver *resolver = g_resolver_get_default(); + g_resolver_lookup_by_name_async(resolver, turn_server, NULL, purple_network_ip_lookup_cb, &turn_server); + g_object_unref(resolver); } else { purple_debug_info("network", "network is unavailable, don't try to update TURN IP"); diff --git a/libpurple/protocols/gg/resolver-purple.c b/libpurple/protocols/gg/resolver-purple.c --- a/libpurple/protocols/gg/resolver-purple.c +++ b/libpurple/protocols/gg/resolver-purple.c @@ -137,6 +137,8 @@ int ggp_resolver_purple_start(int *fd, v const char *hostname) { ggp_resolver_purple_data *data; + GResolver *resolver; + purple_debug_misc("gg", "ggp_resolver_purple_start(%p, %p, \"%s\")\n", fd, private_data, hostname); @@ -158,11 +160,13 @@ int ggp_resolver_purple_start(int *fd, v /* account and port is unknown in this context */ data->cancellable = g_cancellable_new(); - g_resolver_lookup_by_name_async(g_resolver_get_default(), + resolver = g_resolver_get_default(); + g_resolver_lookup_by_name_async(resolver, hostname, data->cancellable, ggp_resolver_purple_cb, (gpointer)data); + g_object_unref(resolver); if (!data->cancellable) { purple_debug_error("gg", "ggp_resolver_purple_start: " diff --git a/libpurple/protocols/jabber/disco.c b/libpurple/protocols/jabber/disco.c --- a/libpurple/protocols/jabber/disco.c +++ b/libpurple/protocols/jabber/disco.c @@ -517,13 +517,15 @@ jabber_disco_server_info_result_cb(Jabbe } else if (purple_network_get_stun_ip() == NULL || purple_strequal(purple_network_get_stun_ip(), "")) { - g_resolver_lookup_service_async(g_resolver_get_default(), + GResolver *resolver = g_resolver_get_default(); + g_resolver_lookup_service_async(resolver, "stun", "udp", js->user->domain, NULL, jabber_disco_stun_srv_resolve_cb, js); + g_object_unref(resolver); /* TODO: add TURN support later... */ } } diff --git a/libpurple/protocols/jabber/google/jingleinfo.c b/libpurple/protocols/jabber/google/jingleinfo.c --- a/libpurple/protocols/jabber/google/jingleinfo.c +++ b/libpurple/protocols/jabber/google/jingleinfo.c @@ -93,13 +93,16 @@ jabber_google_jingle_info_common(JabberS const gchar *udp = purple_xmlnode_get_attrib(server, "udp"); if (host && udp) { + GResolver *resolver = g_resolver_get_default(); + js->stun_port = atoi(udp); - g_resolver_lookup_by_name_async(g_resolver_get_default(), + g_resolver_lookup_by_name_async(resolver, host, NULL, jabber_google_stun_lookup_cb, js); + g_object_unref(resolver); } } } diff --git a/libpurple/protocols/jabber/jabber.c b/libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c +++ b/libpurple/protocols/jabber/jabber.c @@ -825,17 +825,19 @@ jabber_login_callback(gpointer data, gin JabberStream *js = purple_connection_get_protocol_data(gc); if (source < 0) { + GResolver *resolver = g_resolver_get_default(); gchar *name = g_strdup_printf("_xmppconnect.%s", js->user->domain); purple_debug_info("jabber", "Couldn't connect directly to %s. Trying to find alternative connection methods, like BOSH.\n", js->user->domain); - g_resolver_lookup_records_async(g_resolver_get_default(), + g_resolver_lookup_records_async(resolver, name, G_RESOLVER_RECORD_TXT, js->cancellable, txt_resolved_cb, js); g_free(name); + g_object_unref(resolver); return; } @@ -1091,13 +1093,15 @@ jabber_stream_connect(JabberStream *js) jabber_login_connect(js, js->user->domain, connect_server, purple_account_get_int(account, "port", 5222), TRUE); } else { - g_resolver_lookup_service_async(g_resolver_get_default(), + GResolver *resolver = g_resolver_get_default(); + g_resolver_lookup_service_async(resolver, "xmpp-client", "tcp", js->user->domain, js->cancellable, srv_resolved_cb, js); + g_object_unref(resolver); } } diff --git a/libpurple/protocols/simple/simple.c b/libpurple/protocols/simple/simple.c --- a/libpurple/protocols/simple/simple.c +++ b/libpurple/protocols/simple/simple.c @@ -1928,13 +1928,16 @@ srvresolved(GObject *sender, GAsyncResul return; } } else { /* UDP */ + GResolver *resolver = g_resolver_get_default(); + purple_debug_info("simple", "using udp with server %s and port %d\n", hostname, port); - g_resolver_lookup_by_name_async(g_resolver_get_default(), + g_resolver_lookup_by_name_async(resolver, sip->realhostname, sip->cancellable, simple_udp_host_resolved, sip); + g_object_unref(resolver); } } @@ -1944,8 +1947,9 @@ static void simple_login(PurpleAccount * struct simple_account_data *sip; gchar **userserver; const gchar *hosttoconnect; + const char *username = purple_account_get_username(account); + GResolver *resolver; - const char *username = purple_account_get_username(account); gc = purple_account_get_connection(account); purple_connection_set_flags(gc, PURPLE_CONNECTION_FLAG_NO_IMAGES); @@ -1996,13 +2000,15 @@ static void simple_login(PurpleAccount * hosttoconnect = purple_account_get_string(account, "proxy", sip->servername); } - g_resolver_lookup_service_async(g_resolver_get_default(), + resolver = g_resolver_get_default(); + g_resolver_lookup_service_async(resolver, "sip", sip->udp ? "udp" : "tcp", hosttoconnect, sip->cancellable, srvresolved, sip); + g_object_unref(resolver); } static void simple_close(PurpleConnection *gc) diff --git a/libpurple/protocols/yahoo/yahoo_filexfer.c b/libpurple/protocols/yahoo/yahoo_filexfer.c --- a/libpurple/protocols/yahoo/yahoo_filexfer.c +++ b/libpurple/protocols/yahoo/yahoo_filexfer.c @@ -679,6 +679,7 @@ void yahoo_process_filetrans_15(PurpleCo if(val_222 == 3) { struct yahoo_xfer_data *xd; + GResolver *resolver; xfer = g_hash_table_lookup(yd->xfer_peer_idstring_map, xfer_peer_idstring); @@ -703,11 +704,13 @@ void yahoo_process_filetrans_15(PurpleCo } xd->is_relay = TRUE; - g_resolver_lookup_by_name_async(g_resolver_get_default(), + resolver = g_resolver_get_default(); + g_resolver_lookup_by_name_async(resolver, YAHOO_XFER_RELAY_HOST, NULL, yahoo_xfer_dns_connected_15, xfer); + g_object_unref(resolver); return; } diff --git a/libpurple/proxy.c b/libpurple/proxy.c --- a/libpurple/proxy.c +++ b/libpurple/proxy.c @@ -2338,6 +2338,7 @@ purple_proxy_connect(void *handle, Purpl const char *connecthost = host; int connectport = port; PurpleProxyConnectData *connect_data; + GResolver *resolver; g_return_val_if_fail(host != NULL, NULL); g_return_val_if_fail(port > 0, NULL); @@ -2389,11 +2390,13 @@ purple_proxy_connect(void *handle, Purpl connect_data->cancellable = g_cancellable_new(); - g_resolver_lookup_by_name_async(g_resolver_get_default(), + resolver = g_resolver_get_default(); + g_resolver_lookup_by_name_async(resolver, connecthost, connect_data->cancellable, connection_host_resolved, connect_data); + g_object_unref(resolver); if (connect_data->cancellable == NULL) { @@ -2415,6 +2418,7 @@ purple_proxy_connect_udp(void *handle, P const char *connecthost = host; int connectport = port; PurpleProxyConnectData *connect_data; + GResolver *resolver; g_return_val_if_fail(host != NULL, NULL); g_return_val_if_fail(port > 0, NULL); @@ -2466,11 +2470,13 @@ purple_proxy_connect_udp(void *handle, P connect_data->cancellable = g_cancellable_new(); - g_resolver_lookup_by_name_async(g_resolver_get_default(), + resolver = g_resolver_get_default(); + g_resolver_lookup_by_name_async(resolver, connecthost, connect_data->cancellable, connection_host_resolved, connect_data); + g_object_unref(resolver); if (connect_data->cancellable == NULL) { purple_proxy_connect_data_destroy(connect_data); diff --git a/libpurple/stun.c b/libpurple/stun.c --- a/libpurple/stun.c +++ b/libpurple/stun.c @@ -377,6 +377,7 @@ static void do_test1(GObject *sender, GAsyncResult *res, gpointer data) { GList *services = NULL; GError *error = NULL; + GResolver *resolver; const char *servername = data; int port = 3478; @@ -393,11 +394,13 @@ do_test1(GObject *sender, GAsyncResult * purple_debug_info("stun", "connecting to %s:%d\n", servername, port); - g_resolver_lookup_by_name_async(g_resolver_get_default(), + resolver = g_resolver_get_default(); + g_resolver_lookup_by_name_async(resolver, servername, NULL, hbn_cb, GINT_TO_POINTER(port)); + g_object_unref(resolver); g_resolver_free_targets(services); } @@ -410,6 +413,7 @@ static gboolean call_callback(gpointer d PurpleStunNatDiscovery *purple_stun_discover(PurpleStunCallback cb) { const char *servername = purple_prefs_get_string("/purple/network/stun_server"); + GResolver *resolver; purple_debug_info("stun", "using server %s\n", servername); _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits