On 19/12/2016 16:58, John Crispin wrote: > When a question is incoming the service was incorrectly resettig the > query timeout regardless of it being the right service. This causes > the code to never answer the questions it is being asked. > > Reported-by: Cristian Morales Vega <crist...@samknows.com> > Signed-off-by: John Crispin <j...@phrozen.org> > --- > service.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > Hi Cristian > > the patch is only runtime tested, could you give it a spin to see if it > solves your problem ? > s/runtime/compile/g ...
> John > > diff --git a/service.c b/service.c > index fe6e5a9..8d514c2 100644 > --- a/service.c > +++ b/service.c > @@ -107,7 +107,7 @@ service_add_srv(struct service *s, int ttl) > > #define TOUT_LOOKUP 60 > > -static int > +static time_t > service_timeout(struct service *s) > { > time_t t = monotonic_time(); > @@ -115,9 +115,7 @@ service_timeout(struct service *s) > if (t - s->t <= TOUT_LOOKUP) > return 0; > > - s->t = t; > - > - return 1; > + return t; > } > > void > @@ -154,8 +152,10 @@ service_reply_single(struct interface *iface, struct > service *s, const char *mat > { > const char *host = service_name(s->service); > char *service = strstr(host, "._"); > + time_t t = service_timeout(s); > + > > - if (!force && (!s->active || !service || !service_timeout(s))) > + if (!force && (!s->active || !service || !t)) > return; > > service++; > @@ -163,6 +163,8 @@ service_reply_single(struct interface *iface, struct > service *s, const char *mat > if (match && strcmp(match, s->service)) > return; > > + s->t = t; > + > dns_init_answer(); > service_add_ptr(service_name(s->service), ttl); > dns_send_answer(iface, service); > _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev