Hi Willy, Jarno,

Sorry, I did forgot those 2 printf that were here for debugging purpose
only.
I can resend the patch tonight.

Baptiste

On Wed, Nov 6, 2019 at 7:43 AM Willy Tarreau <w...@1wt.eu> wrote:

> Hi Baptiste,
>
> thanks for the fix, but before taking it, are you really sure it's
> the version you wanted to send ? There are a couple of debugging
> printf() left so I could remove them by hand but maybe you intended
> to send a different patch, thus I'd rather let you double-check.
>
> thanks,
> Willy
>
> On Tue, Nov 05, 2019 at 10:04:30AM +0100, Baptiste wrote:
> > diff --git a/src/action.c b/src/action.c
> > index 7684202..36eedc8 100644
> > --- a/src/action.c
> > +++ b/src/action.c
> > @@ -73,6 +73,7 @@ int check_trk_action(struct act_rule *rule, struct
> proxy *px, char **err)
> >  int act_resolution_cb(struct dns_requester *requester, struct
> dns_nameserver *nameserver)
> >  {
> >       struct stream *stream;
> > +printf("%s %d\n", __FUNCTION__, __LINE__);
> >
> >       if (requester->resolution == NULL)
> >               return 0;
> > @@ -89,6 +90,7 @@ int act_resolution_cb(struct dns_requester *requester,
> struct dns_nameserver *na
> >  int act_resolution_error_cb(struct dns_requester *requester, int
> error_code)
> >  {
> >       struct stream *stream;
> > +printf("%s %d\n", __FUNCTION__, __LINE__);
> >
> >       if (requester->resolution == NULL)
> >               return 0;
> > diff --git a/src/dns.c b/src/dns.c
> > index 15d40a1..d5bf449 100644
> > --- a/src/dns.c
> > +++ b/src/dns.c
> > @@ -363,8 +363,9 @@ void dns_trigger_resolution(struct dns_requester
> *req)
> >        * valid */
> >       exp = tick_add(res->last_resolution, resolvers->hold.valid);
> >       if (resolvers->t && (res->status != RSLV_STATUS_VALID ||
> > -         !tick_isset(res->last_resolution) || tick_is_expired(exp,
> now_ms)))
> > +         !tick_isset(res->last_resolution) || tick_is_expired(exp,
> now_ms))) {
> >               task_wakeup(resolvers->t, TASK_WOKEN_OTHER);
> > +     }
> >  }
> >
> >
> > @@ -2150,8 +2151,13 @@ enum act_return dns_action_do_resolve(struct
> act_rule *rule, struct proxy *px,
> >       struct dns_resolution *resolution;
> >       struct sample *smp;
> >       char *fqdn;
> > +     struct dns_requester *req;
> > +     struct dns_resolvers  *resolvers;
> > +     struct dns_resolution *res;
> > +     int exp;
> >
> >       /* we have a response to our DNS resolution */
> > + use_cache:
> >       if (s->dns_ctx.dns_requester &&
> s->dns_ctx.dns_requester->resolution != NULL) {
> >               resolution = s->dns_ctx.dns_requester->resolution;
> >               if (resolution->step == RSLV_STEP_RUNNING) {
> > @@ -2211,6 +2217,22 @@ enum act_return dns_action_do_resolve(struct
> act_rule *rule, struct proxy *px,
> >
> >       s->dns_ctx.parent = rule;
> >       dns_link_resolution(s, OBJ_TYPE_STREAM, 0);
> > +
> > +     /* Check if there is a fresh enough response in the cache of our
> associated resolution */
> > +     req = s->dns_ctx.dns_requester;
> > +     if (!req || !req->resolution) {
> > +             dns_trigger_resolution(s->dns_ctx.dns_requester);
> > +             return ACT_RET_YIELD;
> > +     }
> > +     res       = req->resolution;
> > +     resolvers = res->resolvers;
> > +
> > +     exp = tick_add(res->last_resolution, resolvers->hold.valid);
> > +     if (resolvers->t && res->status == RSLV_STATUS_VALID &&
> tick_isset(res->last_resolution)
> > +                    && !tick_is_expired(exp, now_ms)) {
> > +             goto use_cache;
> > +     }
> > +
> >       dns_trigger_resolution(s->dns_ctx.dns_requester);
> >       return ACT_RET_YIELD;
> >  }
> > --
> > 2.7.4
> >
>
>

Reply via email to