---
 bin/varnishd/storage/storage_persistent.c      |    6 ++++--
 bin/varnishd/storage/storage_persistent.h      |    1 +
 bin/varnishd/storage/storage_persistent_silo.c |    2 ++
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/bin/varnishd/storage/storage_persistent.c 
b/bin/varnishd/storage/storage_persistent.c
index 429cd45..021c5e2 100644
--- a/bin/varnishd/storage/storage_persistent.c
+++ b/bin/varnishd/storage/storage_persistent.c
@@ -368,8 +368,8 @@ smp_save_segs(struct smp_sc *sc)
        VTAILQ_FOREACH_SAFE(sg, &sc->segments, list, sg2) {
                if (sg->nobj > 0)
                        break;
-               if (sg == sc->cur_seg)
-                       continue;
+               if (sg->flags & SMP_SEG_NEW)
+                       break;
                VTAILQ_REMOVE(&sc->segments, sg, list);
                LRU_Free(sg->lru);
                FREE_OBJ(sg);
@@ -386,6 +386,8 @@ smp_save_segs(struct smp_sc *sc)
        VTAILQ_FOREACH(sg, &sc->segments, list) {
                assert(sg->p.offset < sc->mediasize);
                assert(sg->p.offset + sg->p.length <= sc->mediasize);
+               if (sg->flags & SMP_SEG_NEW)
+                       break;
                *ss = sg->p;
                ss++;
                length += sizeof *ss;
diff --git a/bin/varnishd/storage/storage_persistent.h 
b/bin/varnishd/storage/storage_persistent.h
index e716c51..cb2fc82 100644
--- a/bin/varnishd/storage/storage_persistent.h
+++ b/bin/varnishd/storage/storage_persistent.h
@@ -87,6 +87,7 @@ struct smp_seg {
        unsigned                flags;
 #define SMP_SEG_MUSTLOAD       (1 << 0)
 #define SMP_SEG_LOADED         (1 << 1)
+#define SMP_SEG_NEW            (1 << 2)
 
        uint32_t                nobj;           /* Number of objects */
        uint32_t                nalloc;         /* Allocations */
diff --git a/bin/varnishd/storage/storage_persistent_silo.c 
b/bin/varnishd/storage/storage_persistent_silo.c
index 9dd827e..981d1c6 100644
--- a/bin/varnishd/storage/storage_persistent_silo.c
+++ b/bin/varnishd/storage/storage_persistent_silo.c
@@ -176,6 +176,7 @@ smp_new_seg(struct smp_sc *sc)
                return;
        *sg = tmpsg;
        sg->lru = LRU_Alloc();
+       sg->flags |= SMP_SEG_NEW;
        CHECK_OBJ_NOTNULL(sg->lru, LRU_MAGIC);
 
        sg->p.offset = IRNUP(sc, sg->p.offset);
@@ -266,6 +267,7 @@ smp_close_seg(struct smp_sc *sc, struct smp_seg *sg)
        smp_sync_sign(sg->ctx);
 
        /* Request sync of segment list */
+       sg->flags &= ~SMP_SEG_NEW;
        smp_sync_segs(sc);
        sc->free_offset = smp_segend(sg);
 }
-- 
1.7.9.5


_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev

Reply via email to