[master] d12625f Do not set the oa_present bit when ObjSetAttr returns failure

Martin Blix Grydeland martin at varnish-software.com
Tue Feb 23 17:44:46 CET 2016


commit d12625f3c5cc4851b13519503f8e51269e7b0407
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date:   Tue Feb 23 15:43:30 2016 +0100

    Do not set the oa_present bit when ObjSetAttr returns failure

diff --git a/bin/varnishd/cache/cache_expire.c b/bin/varnishd/cache/cache_expire.c
index 6cc92dd..9bdd92e 100644
--- a/bin/varnishd/cache/cache_expire.c
+++ b/bin/varnishd/cache/cache_expire.c
@@ -180,7 +180,7 @@ exp_inbox(struct exp_priv *ep, struct objcore *oc, unsigned flags)
 	    oc->timer_when, oc->flags);
 
 	if (oc->flags & OC_F_DYING) {
-		oc->exp_flags &= OC_EF_EXP;
+		oc->exp_flags &= ~OC_EF_EXP;
 		VSLb(&ep->vsl, SLT_ExpKill, "EXP_Kill p=%p e=%.9f f=0x%x", oc,
 		    oc->timer_when, oc->flags);
 		if (!(flags & OC_EF_INSERT)) {
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index 57961cf..0248ee7 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -414,14 +414,17 @@ ObjSetAttr(struct worker *wrk, struct objcore *oc, enum obj_attr attr,
     ssize_t len, const void *ptr)
 {
 	const struct obj_methods *om = obj_getmethods(oc);
+	void *r;
 
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CHECK_OBJ_NOTNULL(oc->boc, BOC_MAGIC);
 
 	AN(om->objsetattr);
 	assert((int)attr < 16);
-	oc->oa_present |= (1 << attr);
-	return (om->objsetattr(wrk, oc, attr, len, ptr));
+	r = om->objsetattr(wrk, oc, attr, len, ptr);
+	if (r)
+		oc->oa_present |= (1 << attr);
+	return (r);
 }
 
 /*====================================================================



More information about the varnish-commit mailing list