[master] d571dc7 rewrite 0U - VSL_SEGMENTS in way which should make Flexelint happy

Nils Goroll nils.goroll at uplex.de
Mon Jun 29 14:03:58 CEST 2015

commit d571dc72548ce4defa00fe69e9d09b0216930a89
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Mon Jun 29 13:59:52 2015 +0200

    rewrite 0U - VSL_SEGMENTS in way which should make Flexelint happy
    We intentionally provoke an early wrap of our segment_n unsigned int.
    The previous code is fine according to
    "A computation involving unsigned operands can never overflow...",
    but nevertheless we don't want to trigger Flexelint warnings.
    Thanks to Dag Haavi Finstad for digging the ISO standards url.

diff --git a/bin/varnishd/cache/cache_shmlog.c b/bin/varnishd/cache/cache_shmlog.c
index 06b0f49..9bb7d1e 100644
--- a/bin/varnishd/cache/cache_shmlog.c
+++ b/bin/varnishd/cache/cache_shmlog.c
@@ -461,7 +461,7 @@ VSM_Init(void)
 	vsl_end = vsl_head->log + vsl_segsize * VSL_SEGMENTS;
 	/* Make segment_n always overflow on first log wrap to make any
 	   problems with regard to readers on that event visible */
-	vsl_segment_n = 0U - VSL_SEGMENTS;
+	vsl_segment_n = UINT_MAX - VSL_SEGMENTS + 1;
 	AZ(vsl_segment_n % VSL_SEGMENTS);
 	vsl_head->segment_n = vsl_segment_n;
 	vsl_ptr = vsl_head->log;

More information about the varnish-commit mailing list