[master] c97c0d663 vai: Improve Flexarray foreachs (VFLA_FOREACH): NULL var after loop
Nils Goroll
nils.goroll at uplex.de
Wed Jul 9 20:42:05 UTC 2025
commit c97c0d66371fa35c99b699e6840e428ccf5eb6b6
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Wed Jul 9 22:19:03 2025 +0200
vai: Improve Flexarray foreachs (VFLA_FOREACH): NULL var after loop
When the loop completes, the loop variable is now set to NULL. This allows to
easily differentiate between a completion and a break, avoids an out-of-bounds
value after the loop and matches the vqueue macros.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 439390065..c94615395 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -843,10 +843,15 @@ struct vscarab {
VFLA_INIT(type, name, mag, fam, cap); \
} while(0)
#define VFLA_FOREACH(var, cptr, fam) \
- for (var = &(cptr)->fam[0]; var < &(cptr)->fam[(cptr)->used]; var++)
+ for (var = &(cptr)->fam[0]; \
+ (var = (var < &(cptr)->fam[(cptr)->used] ? var : NULL)) != NULL; \
+ var++)
// continue iterating after a break of a _FOREACH
#define VFLA_FOREACH_RESUME(var, cptr, fam) \
- for (; var != NULL && var < &(cptr)->fam[(cptr)->used]; var++)
+ for (; \
+ var != NULL && \
+ (var = (var < &(cptr)->fam[(cptr)->used] ? var : NULL)) != NULL; \
+ var++)
#define VFLA_GET(cptr, fam) ((cptr)->used < (cptr)->capacity ? &(cptr)->fam[(cptr)->used++] : NULL)
// asserts sufficient capacity
#define VFLA_ADD(cptr, fam, val) do { \
diff --git a/bin/varnishd/cache/cache_filter.h b/bin/varnishd/cache/cache_filter.h
index d9f7141f6..60c182330 100644
--- a/bin/varnishd/cache/cache_filter.h
+++ b/bin/varnishd/cache/cache_filter.h
@@ -285,6 +285,7 @@ void vdpio_return_vscarab(const struct vdp_ctx *vdc, struct vscarab *scarab)
VSCARAB_CHECK_NOTNULL(scarab);
VSCARAB_FOREACH(v, scarab)
vdpio_return_lease(vdc, v->lease);
+ AZ(v);
VSCARAB_INIT(scarab, scarab->capacity);
}
More information about the varnish-commit
mailing list