]> granicus.if.org Git - pgbouncer/commitdiff
dnslookup - forgot to strdup host name
authorMarko Kreen <markokr@gmail.com>
Tue, 12 Oct 2010 07:29:24 +0000 (10:29 +0300)
committerMarko Kreen <markokr@gmail.com>
Tue, 12 Oct 2010 07:29:24 +0000 (10:29 +0300)
the original host name will be freed during reload.

also remove unnecessary list_del(), as list_pop() is used above.

src/dnslookup.c

index a52ad614cd171afb34101b4959f36807aa9aa65c..178ccbd7655876a077d7e50e8bd75224144ea470 100644 (file)
@@ -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);