[PATCH 2/6] site: Fix bugs when resolver request submission fails
Ian Jackson
ijackson at chiark.greenend.org.uk
Sat May 17 19:46:31 BST 2014
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 <ijackson at chiark.greenend.org.uk>
---
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)
--
1.7.10.4
More information about the sgo-software-discuss
mailing list