From 2ee6c334126b257708ac92b19c57701e18bb31cc Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 3 Oct 2004 21:32:24 +0000 Subject: set async.done to TRUE last in the addrinfo callback to prevent the risk that the multi-threaded resolver does wrong --- lib/hostasyn.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/hostasyn.c') diff --git a/lib/hostasyn.c b/lib/hostasyn.c index 2bf5a580a..5a0397d7a 100644 --- a/lib/hostasyn.c +++ b/lib/hostasyn.c @@ -115,7 +115,6 @@ static void addrinfo_callback(void *arg, /* "struct connectdata *" */ struct connectdata *conn = (struct connectdata *)arg; struct Curl_dns_entry *dns = NULL; - conn->async.done = TRUE; conn->async.status = status; if(CURL_ASYNC_SUCCESS == status) { @@ -147,6 +146,11 @@ static void addrinfo_callback(void *arg, /* "struct connectdata *" */ conn->async.dns = dns; + /* Set async.done TRUE last in this function since it may be used multi- + threaded and once this is TRUE the other thread may read fields from the + async struct */ + conn->async.done = TRUE; + /* ipv4: The input hostent struct will be freed by ares when we return from this function */ } -- cgit v1.2.3