On Fri, Jul 14, 2017 at 10:15:49PM +0200, Jeremie Courreges-Anglas wrote:
> I find this more readable.

yes, it is

>       /* Step 4, compress the log.0 file if configured to do so and free */
> -     while (p) {
> +     TAILQ_FOREACH_SAFE(p, &runlist, next, tmp) {
>               if ((p->flags & CE_COMPACT) && (p->flags & CE_ROTATED) &&
>                   p->numlogs > 0)
>                       compress_log(p);
> -             q = p;
> -             p = p->next;
> -             free(q);
> +             free(p);
>       }

The usual idiom for freeing a list is:
        while ((p = TAILQ_FIRST(&runlist))) {
                TAILQ_REMOVE(&runlist, p, next);
                ...
                free(p);
        }

Your code leaves a list of freed objects which is not clean.

As we are close to exit, you could also not free anything and use
a TAILQ_FOREACH.

otherwise OK bluhm@

Reply via email to