---
bin/varnishd/cache/cache.h | 2 +-
bin/varnishd/cache/cache_ban.c | 6 ++++--
bin/varnishd/storage/stevedore.c | 9 +++++++++
bin/varnishd/storage/storage.h | 3 +++
bin/varnishd/storage/storage_persistent.c | 7 +++++--
5 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 7533782..7ecf954 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -1054,6 +1054,7 @@ void STV_free(struct storage *st);
void STV_open(void);
void STV_close(void);
void STV_Freestore(struct object *o);
+void STV_NewBan(const uint8_t *ban, unsigned len);
/* storage_synth.c */
struct vsb *SMS_Makesynth(struct object *obj);
@@ -1063,7 +1064,6 @@ void SMS_Init(void);
/* storage_persistent.c */
void SMP_Init(void);
void SMP_Ready(void);
-void SMP_NewBan(const uint8_t *ban, unsigned len);
/*
* A normal pointer difference is signed, but we never want a negative value
diff --git a/bin/varnishd/cache/cache_ban.c b/bin/varnishd/cache/cache_ban.c
index 2054d3e..f895467 100644
--- a/bin/varnishd/cache/cache_ban.c
+++ b/bin/varnishd/cache/cache_ban.c
@@ -413,7 +413,7 @@ BAN_Insert(struct ban *b)
else
be = NULL;
- SMP_NewBan(b->spec, ln);
+ STV_NewBan(b->spec, ln); /* Notify stevedores */
Lck_Unlock(&ban_mtx);
if (be == NULL)
@@ -595,7 +595,9 @@ BAN_Compile(void)
ASSERT_CLI();
- SMP_NewBan(ban_magic->spec, ban_len(ban_magic->spec));
+ /* Notify stevedores */
+ STV_NewBan(ban_magic->spec, ban_len(ban_magic->spec));
+
ban_start = VTAILQ_FIRST(&ban_head);
WRK_BgThread(&ban_thread, "ban-lurker", ban_lurker, NULL);
}
diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index fa5a683..c02e5f7 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -453,6 +453,15 @@ STV_close(void)
stv->close(stv);
}
+void
+STV_NewBan(const uint8_t *ban, unsigned len)
+{
+ struct stevedore *stv;
+
+ VTAILQ_FOREACH(stv, &stv_stevedores, list)
+ if (stv->newban != NULL)
+ stv->newban(stv, ban, len);
+}
/*--------------------------------------------------------------------
* VRT functions for stevedores
diff --git a/bin/varnishd/storage/storage.h b/bin/varnishd/storage/storage.h
index fd1adef..49cd0f8 100644
--- a/bin/varnishd/storage/storage.h
+++ b/bin/varnishd/storage/storage.h
@@ -48,6 +48,8 @@ typedef struct object *storage_allocobj_f(struct stevedore *,
struct busyobj *,
struct objcore **, unsigned ltot, const struct stv_objsecrets *);
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);
/* Prototypes for VCL variable responders */
#define VRTSTVTYPE(ct) typedef ct storage_var_##ct(const struct stevedore *);
@@ -71,6 +73,7 @@ struct stevedore {
storage_close_f *close; /* --//-- */
storage_allocobj_f *allocobj; /* --//-- */
storage_signal_close_f *signal_close; /* --//-- */
+ storage_newban_f *newban; /* --//-- */
struct lru *lru;
diff --git a/bin/varnishd/storage/storage_persistent.c
b/bin/varnishd/storage/storage_persistent.c
index 6b8764f..f38aba6 100644
--- a/bin/varnishd/storage/storage_persistent.c
+++ b/bin/varnishd/storage/storage_persistent.c
@@ -92,11 +92,13 @@ smp_appendban(struct smp_sc *sc, struct smp_signspace *spc,
/* Trust that cache_ban.c takes care of locking */
-void
-SMP_NewBan(const uint8_t *ban, unsigned ln)
+static void
+smp_newban(struct stevedore *stv, const uint8_t *ban, unsigned ln)
{
struct smp_sc *sc;
+ (void)stv;
+
VTAILQ_FOREACH(sc, &silos, list) {
smp_appendban(sc, &sc->ban1, ln, ban);
smp_appendban(sc, &sc->ban2, ln, ban);
@@ -584,6 +586,7 @@ const struct stevedore smp_stevedore = {
.allocobj = smp_allocobj,
.free = smp_free,
.signal_close = smp_signal_close,
+ .newban = smp_newban,
};
/*--------------------------------------------------------------------
--
1.7.9.5
_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev