/pidgin/main: 1e58ac9ee097: Don't have proxy code call callbacks...
Mike Ruprecht <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 1e58ac9ee097c163148124d522485e560423cfe3 Author: Mike Ruprecht <[email protected]> Date: 2016-01-18 00:18 -0600 Branch: default URL: https://hg.pidgin.im/pidgin/main/rev/1e58ac9ee097 Description: Don't have proxy code call callbacks if connect data disposed The raw socket implementation wouldn't call callbacks after the connect data was disposed. Replicate this behavior with the Gio implementation. The GCancellable is only cancelled when disposing the connect data, so if the return from the async function is that it was cancelled, it's safe to assume that the connect data has been disposed. diffstat: libpurple/proxy.c | 52 +++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 37 insertions(+), 15 deletions(-) diffs (76 lines): diff --git a/libpurple/proxy.c b/libpurple/proxy.c --- a/libpurple/proxy.c +++ b/libpurple/proxy.c @@ -732,11 +732,19 @@ connect_to_host_cb(GObject *source, GAsy conn = g_socket_client_connect_to_host_finish(G_SOCKET_CLIENT(source), res, &error); if (conn == NULL) { - purple_debug_error("proxy", - "Unable to connect to destination host: %s\n", - error->message); - purple_proxy_connect_data_disconnect(connect_data, - "Unable to connect to destination host.\n"); + /* Ignore cancelled error as that signifies connect_data has + * been freed + */ + if (!g_error_matches(error, G_IO_ERROR, + G_IO_ERROR_CANCELLED)) { + purple_debug_error("proxy", "Unable to connect to " + "destination host: %s\n", + error->message); + purple_proxy_connect_data_disconnect(connect_data, + "Unable to connect to destination " + "host.\n"); + } + g_clear_error(&error); return; } @@ -817,11 +825,19 @@ socks5_proxy_connect_cb(GObject *source, stream = g_proxy_connect_finish(G_PROXY(source), res, &error); if (stream == NULL) { - purple_debug_error("proxy", - "Unable to connect to destination host: %s\n", - error->message); - purple_proxy_connect_data_disconnect(connect_data, - "Unable to connecto to destination host.\n"); + /* Ignore cancelled error as that signifies connect_data has + * been freed + */ + if (!g_error_matches(error, G_IO_ERROR, + G_IO_ERROR_CANCELLED)) { + purple_debug_error("proxy", "Unable to connect to " + "destination host: %s\n", + error->message); + purple_proxy_connect_data_disconnect(connect_data, + "Unable to connect to destination " + "host.\n"); + } + g_clear_error(&error); return; } @@ -869,11 +885,17 @@ socks5_connect_to_host_cb(GObject *sourc conn = g_socket_client_connect_to_host_finish(G_SOCKET_CLIENT(source), res, &error); if (conn == NULL) { - purple_debug_error("proxy", - "Unable to connect to SOCKS5 host: %s\n", - error->message); - purple_proxy_connect_data_disconnect(connect_data, - "Unable to connect to SOCKS5 host.\n"); + /* Ignore cancelled error as that signifies connect_data has + * been freed + */ + if (!g_error_matches(error, G_IO_ERROR, + G_IO_ERROR_CANCELLED)) { + purple_debug_error("proxy", "Unable to connect to " + "SOCKS5 host: %s\n", error->message); + purple_proxy_connect_data_disconnect(connect_data, + "Unable to connect to SOCKS5 host.\n"); + } + g_clear_error(&error); return; } _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits