Mercurial > pidgin
changeset 31745:451242c455ca
dnssrv: Proper memory management here, which stops random crashes elsewhere.
'query' is owned by the query_data, so must not be freed.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 17 Jul 2011 20:08:13 +0000 |
parents | 4739488955a7 |
children | 8dbe2f531a89 |
files | libpurple/dnssrv.c |
diffstat | 1 files changed, 8 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/dnssrv.c Sun Jul 17 17:23:17 2011 +0000 +++ b/libpurple/dnssrv.c Sun Jul 17 20:08:13 2011 +0000 @@ -748,6 +748,7 @@ if(pipe(in) || pipe(out)) { purple_debug_error("dnssrv", "Could not create pipe\n"); g_free(query); + g_free(query_data); cb(NULL, 0, extradata); return NULL; } @@ -755,8 +756,9 @@ pid = fork(); if (pid == -1) { purple_debug_error("dnssrv", "Could not create process!\n"); + g_free(query); + g_free(query_data); cb(NULL, 0, extradata); - g_free(query); return NULL; } @@ -764,6 +766,7 @@ if (pid == 0) { g_free(query); + g_free(query_data); close(out[0]); close(in[1]); @@ -786,8 +789,6 @@ query_data->fd_in = in[1]; query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data); - g_free(query); - return query_data; #else if (!initialized) { @@ -883,6 +884,7 @@ if(pipe(in) || pipe(out)) { purple_debug_error("dnssrv", "Could not create pipe\n"); g_free(query); + g_free(query_data); cb(NULL, extradata); return NULL; } @@ -890,8 +892,9 @@ pid = fork(); if (pid == -1) { purple_debug_error("dnssrv", "Could not create process!\n"); + g_free(query); + g_free(query_data); cb(NULL, extradata); - g_free(query); return NULL; } @@ -899,6 +902,7 @@ if (pid == 0) { g_free(query); + g_free(query_data); close(out[0]); close(in[1]); @@ -921,8 +925,6 @@ query_data->fd_in = in[1]; query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data); - g_free(query); - return query_data; #else if (!initialized) {