]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fixup secondary buffer in case of error callback.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 21 Jun 2007 07:52:51 +0000 (07:52 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 21 Jun 2007 07:52:51 +0000 (07:52 +0000)
git-svn-id: file:///svn/unbound/trunk@410 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/worker.c
services/outside_network.c

index 2277f65f463b19cd7f4856853b73d1023db731d6..2556d7f234ba9115dd783fedb4012eb1927a09c4 100644 (file)
@@ -376,6 +376,7 @@ worker_handle_service_reply(struct comm_point* c, void* arg, int error,
        struct work_query* w = e->qstate->work_info;
        struct worker* worker = e->qstate->env->worker;
 
+       verbose(VERB_ALGO, "worker scvd callback for qstate %p", e->qstate);
        e->qstate->reply = reply_info;
        if(error != 0) {
                worker_process_query(worker, w, e->qstate, 
index 85e2f1d28fcceb3a472f9f7614632c9232b25eaa..9d754db55f386de1f461d38b7a8156349063459c 100644 (file)
@@ -1014,7 +1014,8 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c,
        rem = rbtree_delete(sq->outnet->serviced, sq);
        log_assert(rem); /* should have been present */
        sq->to_be_deleted = 1; 
-       if(dobackup) {
+       verbose(VERB_ALGO, "svcd callbacks start");
+       if(dobackup && c) {
                /* make a backup of the query, since the querystate processing
                 * may send outgoing queries that overwrite the buffer.
                 * use secondary buffer to store the query.
@@ -1029,7 +1030,7 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c,
        }
        while(p) {
                n = p->next;
-               if(dobackup) {
+               if(dobackup && c) {
                        ldns_buffer_clear(c->buffer);
                        ldns_buffer_write(c->buffer, 
                        ldns_buffer_begin(sq->outnet->udp_second),
@@ -1039,6 +1040,7 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c,
                (void)(*p->cb)(c, p->cb_arg, error, rep);
                p = n;
        }
+       verbose(VERB_ALGO, "svcd callbacks end");
        log_assert(sq->cblist == NULL);
        serviced_delete(sq);
 }