From 25092accc161ea6c0a0f8eb4627e3e087381f4a1 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Thu, 21 Jun 2007 07:52:51 +0000 Subject: [PATCH] Fixup secondary buffer in case of error callback. git-svn-id: file:///svn/unbound/trunk@410 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/worker.c | 1 + services/outside_network.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 2277f65f4..2556d7f23 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -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, diff --git a/services/outside_network.c b/services/outside_network.c index 85e2f1d28..9d754db55 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -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); }