--- bin/varnishd/cache/cache.h | 1 + bin/varnishd/cache/cache_ban.c | 6 ++++++ bin/varnishd/storage/stevedore.c | 10 ++++++++++ bin/varnishd/storage/storage.h | 3 +++ 4 files changed, 20 insertions(+)
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h index 7ecf954..95fc5e2 100644 --- a/bin/varnishd/cache/cache.h +++ b/bin/varnishd/cache/cache.h @@ -1055,6 +1055,7 @@ void STV_open(void); void STV_close(void); void STV_Freestore(struct object *o); void STV_NewBan(const uint8_t *ban, unsigned len); +void STV_DropBan(const uint8_t *ban, unsigned len); /* storage_synth.c */ struct vsb *SMS_Makesynth(struct object *obj); diff --git a/bin/varnishd/cache/cache_ban.c b/bin/varnishd/cache/cache_ban.c index f895467..4f0d332 100644 --- a/bin/varnishd/cache/cache_ban.c +++ b/bin/varnishd/cache/cache_ban.c @@ -814,6 +814,9 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl, unsigned pass) do { Lck_Lock(&ban_mtx); b2 = ban_CheckLast(); + if (b2 != NULL) + /* Notify stevedores */ + STV_DropBan(b2->spec, ban_len(b2->spec)); Lck_Unlock(&ban_mtx); if (b2 != NULL) BAN_Free(b2); @@ -961,6 +964,9 @@ ban_lurker(struct worker *wrk, void *priv) */ Lck_Lock(&ban_mtx); bf = ban_CheckLast(); + if (bf != NULL) + /* Notify stevedores */ + STV_DropBan(bf->spec, ban_len(bf->spec)); Lck_Unlock(&ban_mtx); if (bf != NULL) BAN_Free(bf); diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c index c02e5f7..b79f197 100644 --- a/bin/varnishd/storage/stevedore.c +++ b/bin/varnishd/storage/stevedore.c @@ -463,6 +463,16 @@ STV_NewBan(const uint8_t *ban, unsigned len) stv->newban(stv, ban, len); } +void +STV_DropBan(const uint8_t *ban, unsigned len) +{ + struct stevedore *stv; + + VTAILQ_FOREACH(stv, &stv_stevedores, list) + if (stv->dropban != NULL) + stv->dropban(stv, ban, len); +} + /*-------------------------------------------------------------------- * VRT functions for stevedores */ diff --git a/bin/varnishd/storage/storage.h b/bin/varnishd/storage/storage.h index 49cd0f8..740f282 100644 --- a/bin/varnishd/storage/storage.h +++ b/bin/varnishd/storage/storage.h @@ -50,6 +50,8 @@ typedef void storage_close_f(const struct stevedore *); typedef void storage_signal_close_f(const struct stevedore *); typedef void storage_newban_f(struct stevedore *, const uint8_t *ban, unsigned len); +typedef void storage_dropban_f(struct stevedore *, const uint8_t *ban, + unsigned len); /* Prototypes for VCL variable responders */ #define VRTSTVTYPE(ct) typedef ct storage_var_##ct(const struct stevedore *); @@ -74,6 +76,7 @@ struct stevedore { storage_allocobj_f *allocobj; /* --//-- */ storage_signal_close_f *signal_close; /* --//-- */ storage_newban_f *newban; /* --//-- */ + storage_dropban_f *dropban; /* --//-- */ struct lru *lru; -- 1.7.9.5 _______________________________________________ varnish-dev mailing list varnish-dev@varnish-cache.org https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev