[master] 4442c6d7c move busyobj cancel handling to a seprate function

Nils Goroll nils.goroll at uplex.de
Wed Apr 10 09:29:07 UTC 2019


commit 4442c6d7ccc81ebade83846d832c93607f007457
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Sun Apr 7 18:17:52 2019 +0200

    move busyobj cancel handling to a seprate function

diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index 1395f7101..0d54fd48c 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -765,6 +765,35 @@ HSH_Abandon(struct objcore *oc)
 	Lck_Unlock(&oh->mtx);
 }
 
+/*---------------------------------------------------------------------
+ * Cancel a fetch when the client does not need it any more
+ */
+
+void
+HSH_Cancel(struct worker *wrk, struct objcore *oc, struct boc *boc)
+{
+	struct boc *bocref = NULL;
+
+	if ((oc->flags & (OC_F_PRIVATE | OC_F_HFM | OC_F_HFP)) == 0)
+		return;
+
+	if (boc == NULL)
+		bocref = boc = HSH_RefBoc(oc);
+
+	if (oc->flags & OC_F_HFP)
+		AN(oc->flags & OC_F_HFM);
+
+	if (boc != NULL) {
+		HSH_Abandon(oc);
+		ObjWaitState(oc, BOS_FINISHED);
+	}
+
+	if (bocref != NULL)
+		HSH_DerefBoc(wrk, oc);
+
+	ObjSlim(wrk, oc);
+}
+
 /*---------------------------------------------------------------------
  * Unbusy an objcore when the object is completely fetched.
  */
diff --git a/bin/varnishd/cache/cache_objhead.h b/bin/varnishd/cache/cache_objhead.h
index 41b7781a5..c2755dce1 100644
--- a/bin/varnishd/cache/cache_objhead.h
+++ b/bin/varnishd/cache/cache_objhead.h
@@ -74,3 +74,4 @@ unsigned HSH_Purge(struct worker *, struct objhead *, vtim_real ttl_now,
     vtim_dur ttl, vtim_dur grace, vtim_dur keep);
 struct objcore *HSH_Private(const struct worker *wrk);
 void HSH_Abandon(struct objcore *oc);
+void HSH_Cancel(struct worker *, struct objcore *, struct boc *);
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index a310cd32b..c6764e0c2 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -404,15 +404,7 @@ cnt_transmit(struct worker *wrk, struct req *req)
 
 	VSLb_ts_req(req, "Resp", W_TIM_real(wrk));
 
-	if (req->objcore->flags & (OC_F_PRIVATE | OC_F_HFM | OC_F_HFP)) {
-		if (req->objcore->flags & OC_F_HFP)
-			AN(req->objcore->flags & OC_F_HFM);
-		if (boc != NULL) {
-			HSH_Abandon(req->objcore);
-			ObjWaitState(req->objcore, BOS_FINISHED);
-		}
-		ObjSlim(wrk, req->objcore);
-	}
+	HSH_Cancel(wrk, req->objcore, boc);
 
 	if (boc != NULL)
 		HSH_DerefBoc(wrk, req->objcore);


More information about the varnish-commit mailing list