[master] 30fca975e cache_ban: Flexelint banidx
Dridi Boukelmoune
dridi at varni.sh
Thu Apr 17 10:03:08 UTC 2025
On Thu, Apr 17, 2025 at 9:08 AM Nils Goroll <nils.goroll at uplex.de> wrote:
>
>
> commit 30fca975e4e596a541106997f5cf5f282da164ac
> Author: Nils Goroll <nils.goroll at uplex.de>
> Date: Thu Apr 17 11:06:28 2025 +0200
>
> cache_ban: Flexelint banidx
>
> Ref f8d611fb54f936006faefba07d54b20300ead611
>
> diff --git a/bin/varnishd/cache/cache_ban_idx.c b/bin/varnishd/cache/cache_ban_idx.c
> index 11a5886a0..7857ffb20 100644
> --- a/bin/varnishd/cache/cache_ban_idx.c
> +++ b/bin/varnishd/cache/cache_ban_idx.c
> @@ -44,9 +44,6 @@
>
> #include "cache_varnishd.h"
> #include "cache_ban.h"
> -#include "cache_objhead.h"
> -
> -#include "vtree.h"
>
> struct metaban {
> unsigned magic;
> @@ -58,7 +55,7 @@ struct metaban {
> };
>
> static inline int
> -metaban_cmp(const struct metaban *i1, struct metaban *i2)
> +metaban_cmp(const struct metaban *i1, const struct metaban *i2)
> {
> if (i1->time < i2->time)
> return (-1);
> @@ -67,10 +64,33 @@ metaban_cmp(const struct metaban *i1, struct metaban *i2)
> return (0);
> }
>
> +/* why does vtree.h not declare name and elm const ? */
> +#define VRBT_GENERATE_NFINDc(name, type, field, cmp, attr) \
Why not patch vtree.h to align NFIND with FIND regarding const arguments?
(and maybe try to report the lack of const upstream)
Adding a specific generator here just to remove a flexlint complaint
is a bit extreme, especially since it appears that we already patch
FIND to constify arguments when we import it.
See the lack of const for both at least here:
https://github.com/freebsd/freebsd-src/blob/main/sys/sys/tree.h
It's probably just that we never used NFIND before so flexelint didn't
have a reason to complain until now.
Dridi
> +/* Finds the first node greater than or equal to the search key */ \
> +attr struct type * \
> +name##_VRBT_NFIND(const struct name *head, const struct type *elm) \
> +{ \
> + struct type *tmp = VRBT_ROOT(head); \
> + struct type *res = NULL; \
> + __typeof(cmp(NULL, NULL)) comp; \
> + while (tmp) { \
> + comp = cmp(elm, tmp); \
> + if (comp < 0) { \
> + res = tmp; \
> + tmp = VRBT_LEFT(tmp, field); \
> + } \
> + else if (comp > 0) \
> + tmp = VRBT_RIGHT(tmp, field); \
> + else \
> + return (tmp); \
> + } \
> + return (res); \
> +}
> +
> VRBT_HEAD(banidx_s, metaban);
> VRBT_GENERATE_REMOVE_COLOR(banidx_s, metaban, tree, static)
> VRBT_GENERATE_REMOVE(banidx_s, metaban, tree, static)
> -VRBT_GENERATE_NFIND(banidx_s, metaban, tree, metaban_cmp, static)
> +VRBT_GENERATE_NFINDc(banidx_s, metaban, tree, metaban_cmp, static)
> VRBT_GENERATE_INSERT_COLOR(banidx_s, metaban, tree, static)
> VRBT_GENERATE_INSERT_FINISH(banidx_s, metaban, tree, static)
> VRBT_GENERATE_INSERT(banidx_s, metaban, tree, metaban_cmp, static)
> @@ -83,7 +103,8 @@ static pthread_mutex_t banidxmtx = PTHREAD_MUTEX_INITIALIZER;
> struct ban *
> BANIDX_lookup(vtim_real t0)
> {
> - struct metaban *m, needle = {0, .time = t0};
> + struct metaban *m; //lint -e429 not freed or returned
> + struct metaban needle = {0, .time = t0};
> struct ban *best = NULL, *b = NULL;
> vtim_real t1;
>
> @@ -114,6 +135,7 @@ BANIDX_lookup(vtim_real t0)
> if (t1 < t0)
> break;
> ALLOC_OBJ(m, BANIDX_MAGIC);
> + AN(m);
> m->time = t1;
> m->ban = b;
> AZ(VRBT_INSERT(banidx_s, &banidx, m));
> _______________________________________________
> varnish-commit mailing list
> varnish-commit at varnish-cache.org
> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-commit
More information about the varnish-commit
mailing list