[4.1] ea2d74c Don't reset the oc->ban pointer from BAN_CheckObject
Martin Blix Grydeland
martin at varnish-software.com
Thu Mar 3 10:52:53 CET 2016
commit ea2d74c4ac20a2182ad8e717076ad912fe2b5994
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date: Wed Mar 2 14:59:09 2016 +0100
Don't reset the oc->ban pointer from BAN_CheckObject
Resetting the pointer would race against the ban lurker moving the OC
in the ban list and any object event listeners wanting to see the new
ban timestamp on OEV_BANCHG.
Fixes: #1863
diff --git a/bin/varnishd/cache/cache_ban.c b/bin/varnishd/cache/cache_ban.c
index bb06490..cfb8da0 100644
--- a/bin/varnishd/cache/cache_ban.c
+++ b/bin/varnishd/cache/cache_ban.c
@@ -554,16 +554,14 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req)
VSC_C_main->bans_tested++;
VSC_C_main->bans_tests_tested += tests;
- oc->ban->refcount--;
- VTAILQ_REMOVE(&oc->ban->objcore, oc, ban_list);
if (b == bn) {
/* not banned */
+ oc->ban->refcount--;
+ VTAILQ_REMOVE(&oc->ban->objcore, oc, ban_list);
VTAILQ_INSERT_TAIL(&b0->objcore, oc, ban_list);
b0->refcount++;
oc->ban = b0;
b = NULL;
- } else {
- oc->ban = NULL;
}
if (VTAILQ_LAST(&ban_head, banhead_s)->refcount == 0)
More information about the varnish-commit
mailing list