[master] 9b31cf3 Don't reset the oc->ban pointer from BAN_CheckObject
Martin Blix Grydeland
martin at varnish-software.com
Thu Mar 3 10:49:43 CET 2016
commit 9b31cf338e93418571bfa6114fbb197143811493
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 78504bb..7494ee0 100644
--- a/bin/varnishd/cache/cache_ban.c
+++ b/bin/varnishd/cache/cache_ban.c
@@ -575,16 +575,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