summaryrefslogtreecommitdiff
path: root/gweb
diff options
context:
space:
mode:
authorTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>2013-01-28 13:43:11 (GMT)
committerPatrik Flykt <patrik.flykt@linux.intel.com>2013-01-28 14:18:28 (GMT)
commitfd0bc5cdfaa1d0bf6abf32e71abde45f581572ee (patch)
treec5e7a47aaa2455cab3e56b5bcc845bafe475bc74 /gweb
parent82c0faebfe4df59c8722271874e83a0db4ceefef (diff)
downloadconnman-fd0bc5cdfaa1d0bf6abf32e71abde45f581572ee.zip
connman-fd0bc5cdfaa1d0bf6abf32e71abde45f581572ee.tar.gz
connman-fd0bc5cdfaa1d0bf6abf32e71abde45f581572ee.tar.bz2
gresolv: Destroy query at the relevant place when parsing the response
parse_response() will eventually call sort_and_return_results() which in turn will call the result function. But the result function might cancel the gresolv. At that point all queries belonging to this gresolv are destroyed. Returning back to parse_response(), it calls again destroy_query() on an already destroyed one. Thus leading to a crash. Same issue with query_timeout() Reported by Daniel Wagner
Diffstat (limited to 'gweb')
-rw-r--r--gweb/gresolv.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/gweb/gresolv.c b/gweb/gresolv.c
index 322299a..71b70dc 100644
--- a/gweb/gresolv.c
+++ b/gweb/gresolv.c
@@ -539,12 +539,11 @@ static gboolean query_timeout(gpointer user_data)
}
g_queue_remove(resolv->query_queue, query);
+ destroy_query(query);
if (lookup->ipv4_query == NULL && lookup->ipv6_query == NULL)
sort_and_return_results(lookup);
- destroy_query(query);
-
return FALSE;
}
@@ -731,11 +730,10 @@ static void parse_response(struct resolv_nameserver *nameserver,
}
g_queue_remove(resolv->query_queue, query);
+ destroy_query(query);
if (lookup->ipv4_query == NULL && lookup->ipv6_query == NULL)
sort_and_return_results(lookup);
-
- destroy_query(query);
}
static gboolean received_udp_data(GIOChannel *channel, GIOCondition cond,