From: Marko Kreen Date: Tue, 12 Oct 2010 07:29:24 +0000 (+0300) Subject: dnslookup - forgot to strdup host name X-Git-Tag: pgbouncer_1_4_rc3~24 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed74a83706b0045b2358ddcfebdab3f0b5e8116a;p=pgbouncer dnslookup - forgot to strdup host name the original host name will be freed during reload. also remove unnecessary list_del(), as list_pop() is used above. --- diff --git a/src/dnslookup.c b/src/dnslookup.c index a52ad61..178ccbd 100644 --- a/src/dnslookup.c +++ b/src/dnslookup.c @@ -315,6 +315,7 @@ loop: /* launch callback */ log_noise("dns: deliver_info(%s) type=%d pos=%d", req->name, req->res_af, req->res_pos); ucb->cb_func(ucb->cb_arg, req->res_af, res + req->res_pos * adrlen); + free(ucb); /* round-robin between results */ if (req->res_count > 1) { @@ -323,10 +324,6 @@ loop: req->res_pos = 0; } - /* drop request */ - list_del(&ucb->node); - free(ucb); - goto loop; } @@ -391,8 +388,12 @@ void adns_resolve(struct DNSContext *ctx, const char *name, adns_callback_f cb_f req = calloc(1, sizeof(*req)); if (!req) goto nomem; + req->name = strdup(name); + if (!req->name) { + free(req); + goto nomem; + } req->ctx = ctx; - req->name = name; req->namelen = namelen; list_init(&req->ucb_list); aatree_insert(&ctx->req_tree, (long)req->name, &req->node);