Leaks in gsocketclient.c connection code
This trivial program demonstrates a leak:
#include <gio/gio.h>
static void
on_ready_get_result (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
GAsyncResult **result_p = user_data;
*result_p = g_object_ref (result);
}
int
main (void)
{
g_autoptr(GSocketClient) client = g_socket_client_new ();
g_autoptr(GAsyncResult) result = NULL;
g_socket_client_connect_to_host_async (client, "localhost", 1234, NULL,
on_ready_get_result, &result);
while (result == NULL)
g_main_context_iteration (NULL, TRUE);
return 0;
}
==7905== 680 (56 direct, 624 indirect) bytes in 1 blocks are definitely lost in loss record 1,545 of 1,567
==7905== at 0x10083AB35: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==7905== by 0x100AB8218: g_malloc0 (gmem.c:129)
==7905== by 0x1008E0E27: connection_attempt_new (gsocketclient.c:1378)
==7905== by 0x1008E0E27: g_socket_client_enumerator_callback (gsocketclient.c:1784)
==7905== by 0x1008EB3E8: g_task_return_now (gtask.c:1209)
==7905== by 0x1008EBF02: g_task_return.part.1 (gtask.c:1278)
==7905== by 0x1008D18E1: return_result (gproxyaddressenumerator.c:407)
==7905== by 0x1008EB3E8: g_task_return_now (gtask.c:1209)
==7905== by 0x1008EB428: complete_in_idle_cb (gtask.c:1223)
==7905== by 0x100AB26C7: g_main_dispatch (gmain.c:3193)
==7905== by 0x100AB26C7: g_main_context_dispatch (gmain.c:3858)
==7905== by 0x100AB2A87: g_main_context_iterate.isra.26 (gmain.c:3931)
==7905== by 0x100AB2B0B: g_main_context_iteration (gmain.c:3992)
==7905== by 0x10929E: main (simple.c:23)
The leak is there in Ubuntu disco (2.60.0-1) and upstream git master, but not in Debian buster (2.58.3-1), which seems to suggest that it was introduced as a result of the recent changes to the connection code.