[master] e622ed38c Use Lck_CondWait() and Lck_CondWaitTimeout() instead of Lck_CondWaitUntil()

Poul-Henning Kamp phk at FreeBSD.org
Tue Oct 12 15:33:07 UTC 2021


commit e622ed38ca0fa8fd2b6223a52de17f580bb8dc3f
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Oct 12 15:31:32 2021 +0000

    Use Lck_CondWait() and Lck_CondWaitTimeout() instead of Lck_CondWaitUntil()

diff --git a/bin/varnishd/cache/cache_ban_lurker.c b/bin/varnishd/cache/cache_ban_lurker.c
index c7c41e077..ab5280e88 100644
--- a/bin/varnishd/cache/cache_ban_lurker.c
+++ b/bin/varnishd/cache/cache_ban_lurker.c
@@ -413,7 +413,6 @@ void * v_matchproto_(bgthread_t)
 ban_lurker(struct worker *wrk, void *priv)
 {
 	struct vsl_log vsl;
-	vtim_real d;
 	vtim_dur dt;
 	unsigned gen = ban_generation + 1;
 
@@ -426,11 +425,11 @@ ban_lurker(struct worker *wrk, void *priv)
 		dt = ban_lurker_work(wrk, &vsl);
 		if (DO_DEBUG(DBG_LURKER))
 			VSLb(&vsl, SLT_Debug, "lurker: sleep = %lf", dt);
-		d = VTIM_real() + dt;
 		Lck_Lock(&ban_mtx);
 		if (gen == ban_generation) {
 			Pool_Sumstat(wrk);
-			(void)Lck_CondWaitUntil(&ban_lurker_cond, &ban_mtx, d);
+			(void)Lck_CondWaitTimeout(
+			    &ban_lurker_cond, &ban_mtx, dt);
 			ban_batch = 0;
 		}
 		gen = ban_generation;
diff --git a/bin/varnishd/cache/cache_conn_pool.c b/bin/varnishd/cache/cache_conn_pool.c
index a1ec971ea..2a2a76ca8 100644
--- a/bin/varnishd/cache/cache_conn_pool.c
+++ b/bin/varnishd/cache/cache_conn_pool.c
@@ -488,7 +488,7 @@ VCP_Get(struct conn_pool *cp, vtim_dur tmo, struct worker *wrk,
  */
 
 int
-VCP_Wait(struct worker *wrk, struct pfd *pfd, vtim_real tmo)
+VCP_Wait(struct worker *wrk, struct pfd *pfd, vtim_real when)
 {
 	struct conn_pool *cp;
 	int r;
@@ -500,7 +500,7 @@ VCP_Wait(struct worker *wrk, struct pfd *pfd, vtim_real tmo)
 	assert(pfd->cond == &wrk->cond);
 	Lck_Lock(&cp->mtx);
 	while (pfd->state == PFD_STATE_STOLEN) {
-		r = Lck_CondWaitUntil(&wrk->cond, &cp->mtx, tmo);
+		r = Lck_CondWaitUntil(&wrk->cond, &cp->mtx, when);
 		if (r != 0) {
 			if (r == EINTR)
 				continue;
diff --git a/bin/varnishd/cache/cache_esi_deliver.c b/bin/varnishd/cache/cache_esi_deliver.c
index f712b693e..c6fc3b0b6 100644
--- a/bin/varnishd/cache/cache_esi_deliver.c
+++ b/bin/varnishd/cache/cache_esi_deliver.c
@@ -202,8 +202,7 @@ ved_include(struct req *preq, const char *src, const char *host,
 		assert(s == REQ_FSM_DISEMBARK);
 		Lck_Lock(&sp->mtx);
 		if (!ecx->woken)
-			(void)Lck_CondWaitUntil(
-			    &ecx->preq->wrk->cond, &sp->mtx, 0);
+			(void)Lck_CondWait(&ecx->preq->wrk->cond, &sp->mtx);
 		Lck_Unlock(&sp->mtx);
 		AZ(req->wrk);
 	}
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index e5cd2af28..24785b567 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -257,7 +257,7 @@ ObjWaitExtend(const struct worker *wrk, const struct objcore *oc, uint64_t l)
 		assert(l <= rv || oc->boc->state == BOS_FAILED);
 		if (rv > l || oc->boc->state >= BOS_FINISHED)
 			break;
-		(void)Lck_CondWaitUntil(&oc->boc->cond, &oc->boc->mtx, 0);
+		(void)Lck_CondWait(&oc->boc->cond, &oc->boc->mtx);
 	}
 	rv = oc->boc->len_so_far;
 	Lck_Unlock(&oc->boc->mtx);
@@ -307,7 +307,7 @@ ObjWaitState(const struct objcore *oc, enum boc_state_e want)
 	while (1) {
 		if (oc->boc->state >= want)
 			break;
-		(void)Lck_CondWaitUntil(&oc->boc->cond, &oc->boc->mtx, 0);
+		(void)Lck_CondWait(&oc->boc->cond, &oc->boc->mtx);
 	}
 	Lck_Unlock(&oc->boc->mtx);
 }
diff --git a/bin/varnishd/cache/cache_wrk.c b/bin/varnishd/cache/cache_wrk.c
index 02be15c81..3ef669de8 100644
--- a/bin/varnishd/cache/cache_wrk.c
+++ b/bin/varnishd/cache/cache_wrk.c
@@ -440,7 +440,8 @@ Pool_Work_Thread(struct pool *pp, struct worker *wrk)
 					tmo =  now + 1.;
 				else
 					tmo =  now + 60.;
-				(void)Lck_CondWaitUntil(&wrk->cond, &pp->mtx, tmo);
+				(void)Lck_CondWaitUntil(
+				    &wrk->cond, &pp->mtx, tmo);
 				if (wrk->task->func != NULL) {
 					/* We have been handed a new task */
 					tpx = *wrk->task;
@@ -697,14 +698,14 @@ pool_herder(void *priv)
 		if (pp->lqueue == 0) {
 			if (DO_DEBUG(DBG_VTC_MODE))
 				delay = 0.5;
-			r = Lck_CondWaitUntil(&pp->herder_cond, &pp->mtx,
-			    VTIM_real() + delay);
+			r = Lck_CondWaitTimeout(
+			    &pp->herder_cond, &pp->mtx, delay);
 		} else if (pp->nthr >= cache_param->wthread_max) {
 			/* XXX: unsafe counters */
 			if (r != ETIMEDOUT)
 				VSC_C_main->threads_limited++;
-			r = Lck_CondWaitUntil(&pp->herder_cond, &pp->mtx,
-			    VTIM_real() + 1.0);
+			r = Lck_CondWaitTimeout(
+			    &pp->herder_cond, &pp->mtx, 1.0);
 		}
 		Lck_Unlock(&pp->mtx);
 	}
diff --git a/bin/varnishd/http2/cache_http2_proto.c b/bin/varnishd/http2/cache_http2_proto.c
index 4d9dc37b1..572275392 100644
--- a/bin/varnishd/http2/cache_http2_proto.c
+++ b/bin/varnishd/http2/cache_http2_proto.c
@@ -1038,8 +1038,8 @@ h2_vfp_body(struct vfp_ctx *vc, struct vfp_entry *vfe, void *ptr, ssize_t *lp)
 		if (retval != VFP_OK || l > 0)
 			break;
 
-		i = Lck_CondWaitUntil(r2->cond, &h2->sess->mtx,
-		    VTIM_real() + SESS_TMO(h2->sess, timeout_idle));
+		i = Lck_CondWaitTimeout(r2->cond, &h2->sess->mtx,
+		    SESS_TMO(h2->sess, timeout_idle));
 		if (i == ETIMEDOUT) {
 			retval = VFP_ERROR;
 			break;
diff --git a/bin/varnishd/http2/cache_http2_send.c b/bin/varnishd/http2/cache_http2_send.c
index a1439c0a5..84c6e2c93 100644
--- a/bin/varnishd/http2/cache_http2_send.c
+++ b/bin/varnishd/http2/cache_http2_send.c
@@ -46,7 +46,8 @@
 static int
 h2_cond_wait(pthread_cond_t *cond, struct h2_sess *h2, struct h2_req *r2)
 {
-	vtim_real now, when = 0.;
+	vtim_dur tmo = 0.;
+	vtim_real now;
 	int r;
 
 	AN(cond);
@@ -55,11 +56,10 @@ h2_cond_wait(pthread_cond_t *cond, struct h2_sess *h2, struct h2_req *r2)
 
 	Lck_AssertHeld(&h2->sess->mtx);
 
-	now = VTIM_real();
 	if (cache_param->idle_send_timeout > 0.)
-		when = now + cache_param->idle_send_timeout;
+		tmo = cache_param->idle_send_timeout;
 
-	r = Lck_CondWaitUntil(cond, &h2->sess->mtx, when);
+	r = Lck_CondWaitTimeout(cond, &h2->sess->mtx, tmo);
 	assert(r == 0 || r == ETIMEDOUT);
 
 	now = VTIM_real();
@@ -100,7 +100,7 @@ h2_send_get_locked(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
 	r2->wrk = wrk;
 	VTAILQ_INSERT_TAIL(&h2->txqueue, r2, tx_list);
 	while (!H2_SEND_HELD(h2, r2))
-		AZ(Lck_CondWaitUntil(&wrk->cond, &h2->sess->mtx, 0));
+		AZ(Lck_CondWait(&wrk->cond, &h2->sess->mtx));
 	r2->wrk = NULL;
 }
 
diff --git a/bin/varnishd/http2/cache_http2_session.c b/bin/varnishd/http2/cache_http2_session.c
index 899f2ec56..889441a4c 100644
--- a/bin/varnishd/http2/cache_http2_session.c
+++ b/bin/varnishd/http2/cache_http2_session.c
@@ -429,7 +429,7 @@ h2_new_session(struct worker *wrk, void *arg)
 		VTAILQ_FOREACH(r2, &h2->streams, list)
 			VSLb(h2->vsl, SLT_Debug, "ST %u %d",
 			    r2->stream, r2->state);
-		(void)Lck_CondWaitUntil(h2->cond, &h2->sess->mtx, VTIM_real() + .1);
+		(void)Lck_CondWaitTimeout(h2->cond, &h2->sess->mtx, .1);
 		Lck_Unlock(&h2->sess->mtx);
 	}
 	h2->cond = NULL;


More information about the varnish-commit mailing list