[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