From: Aki Tuomi Date: Fri, 17 Aug 2018 11:36:13 +0000 (+0300) Subject: lib-dns: Initialize lookup earlier X-Git-Tag: 2.3.4~133 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=09c974db19d33862015eee77c13219db6e3b9c32;p=thirdparty%2Fdovecot%2Fcore.git lib-dns: Initialize lookup earlier --- diff --git a/src/lib-dns/dns-lookup.c b/src/lib-dns/dns-lookup.c index cdc86547c9..d351af29f1 100644 --- a/src/lib-dns/dns-lookup.c +++ b/src/lib-dns/dns-lookup.c @@ -350,40 +350,43 @@ dns_client_lookup_common(struct dns_client *client, dns_lookup_callback_t *callback, void *context, struct dns_lookup **lookup_r) { - struct dns_lookup *lookup; - struct dns_lookup_result result; + struct dns_lookup tlookup, *lookup; int ret; - i_zero(&result); - result.ret = EAI_FAIL; i_assert(param != NULL && *param != '\0'); cmd = t_strdup_printf("%s\t%s\n", cmd, param); - if ((ret = dns_client_send_request(client, cmd, &result.error)) <= 0) { + i_zero(&tlookup); + lookup = &tlookup; + + if (gettimeofday(&lookup->start_time, NULL) < 0) + i_fatal("gettimeofday() failed: %m"); + + lookup->client = client; + lookup->callback = callback; + lookup->context = context; + lookup->ptr_lookup = ptr_lookup; + lookup->result.ret = EAI_FAIL; + + if ((ret = dns_client_send_request(client, cmd, &lookup->result.error)) <= 0) { if (ret == 0) { /* retry once */ - ret = dns_client_send_request(client, cmd, &result.error); + ret = dns_client_send_request(client, cmd, + &lookup->result.error); } if (ret <= 0) { - callback(&result, context); + callback(&lookup.result, context); return -1; } } lookup = i_new(struct dns_lookup, 1); - lookup->client = client; - lookup->ptr_lookup = ptr_lookup; + *lookup = tlookup; if (client->timeout_msecs != 0) { lookup->to = timeout_add_to(client->ioloop, client->timeout_msecs, dns_lookup_timeout, lookup); } - lookup->result.ret = EAI_FAIL; - lookup->callback = callback; - lookup->context = context; - if (gettimeofday(&lookup->start_time, NULL) < 0) - i_fatal("gettimeofday() failed: %m"); - timeout_remove(&client->to_idle); DLLIST2_APPEND(&client->head, &client->tail, lookup); *lookup_r = lookup;