Willy, can you please apply patch from Tim  (below) ?

пт, 4 февр. 2022 г. в 03:06, Tim Düsterhus <t...@bastelstu.be>:

> Hugo,
>
> On 1/25/22 13:13, Hugo Lefeuvre wrote:
> > We are wondering if this is caused by our measurement approach (gcov,
> > passing -fprofile-arcs -ftest-coverage in the CFLAGS and -lgcov to
> > LDFLAGS), or if this is known to the HAProxy community. We reproduced
> these
> > measurements across several recent versions of HAProxy, dev, 2.5, and
> 2.4.
>
> Yes, I believe your measurement is flawed. I tried to reproduce the
> results myself and was confused by seeing uri_normalizer.c not being
> covered when it should be completely covered, except for error paths by
> this test:
>
>
> https://github.com/haproxy/haproxy/blob/master/reg-tests/http-rules/normalize_uri.vtc
>
> Cleaning out all the coverage files and just running that specific test
> using:
>
> vtest -k -t 1 reg-tests/http-rules/normalize_uri.vtc
>
> did not generate any new coverage files!
>
> Digging into it, this appears to be caused by VTest terminating HAProxy
> with a SIGINT, but HAProxy not binding an explicit SIGINT handler. In
> this case it appears that no coverage files are generated.
>
> To test this further I applied the following patch to exit as cleanly as
> possible on SIGINT:
>
> > diff --git i/src/haproxy.c w/src/haproxy.c
> > index f10af5eae..38614a0cb 100644
> > --- i/src/haproxy.c
> > +++ w/src/haproxy.c
> > @@ -790,6 +790,13 @@ void mworker_reload()
> >         mworker_reexec();
> >  }
> >
> > +void die_on_sigint(struct sig_handler *sh)
> > +{
> > +       int sig = sh->arg;
> > +
> > +       deinit_and_exit(0);
> > +}
> > +
> >  static void mworker_loop()
> >  {
> >
> > @@ -3424,6 +3431,10 @@ int main(int argc, char **argv)
> >         /* when multithreading we need to let only the thread 0 handle
> the signals */
> >         haproxy_unblock_signals();
> >
> > +
> > +       signal_register_fct(SIGINT, die_on_sigint, SIGINT);
> > +
> > +
> >         /* Finally, start the poll loop for the first thread */
> >         run_thread_poll_loop(&ha_thread_info[0]);
>
> and then reran the test suite. A few tests failed (this might be because
> my patch inserted the deinit in the wrong location), but the coverage
> looks much better:
>
> I'm getting ~44% line and ~55% function coverage when compiling with
>
> $ make -j4 all TARGET=linux-glibc V=1
>
> uri_normalizer.c gets to 100% function and 85.4% line coverage. The
> non-covered lines are the error handling (incidentally the call to
> 'my_unreachable()' also is marked as uncovered - which is expected).
>
> Best regards
> Tim Düsterhus
>
>

Reply via email to