From 75829536d59e3efdb592aee1effcedb72d9a8cc6 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 13 May 2014 21:08:03 +0100 Subject: [PATCH] site: Fix bugs when resolver request submission fails Previously, if adns_submit failed: - the struct query in resolver.c was leaked - nothing was logged - the return value from resolver->request was ignored so the site state machine would hang Signed-off-by: Ian Jackson --- Changes in v2: * Fixed typo in commit message. --- resolver.c | 9 ++++++++- site.c | 5 ++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/resolver.c b/resolver.c index 033ddc1..15b8e76 100644 --- a/resolver.c +++ b/resolver.c @@ -50,8 +50,15 @@ static bool_t resolve_request(void *sst, cstring_t name, q->answer=cb; rv=adns_submit(st->ast, name, adns_r_a, 0, q, &q->query); + if (rv) { + Message(M_WARNING, + "resolver: failed to submit lookup for %s: %s",name, + adns_strerror(rv)); + free(q); + return False; + } - return rv==0; + return True; } static int resolver_beforepoll(void *sst, struct pollfd *fds, int *nfds_io, diff --git a/site.c b/site.c index 1169052..b6d05af 100644 --- a/site.c +++ b/site.c @@ -1291,9 +1291,8 @@ static bool_t enter_state_resolve(struct site *st) state_assert(st,st->state==SITE_RUN); slog(st,LOG_STATE,"entering state RESOLVE"); st->state=SITE_RESOLVE; - st->resolver->request(st->resolver->st,st->address, - site_resolve_callback,st); - return True; + return st->resolver->request(st->resolver->st,st->address, + site_resolve_callback,st); } static bool_t enter_new_state(struct site *st, uint32_t next) -- 2.30.2