[master] 427e00c Eliminate the list of struct waited, a simple count will do.

Poul-Henning Kamp phk at FreeBSD.org
Thu May 28 00:04:17 CEST 2015


commit 427e00c9c6612d74b78076e564cee9488f7b1606
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed May 27 22:03:57 2015 +0000

    Eliminate the list of struct waited, a simple count will do.

diff --git a/bin/varnishd/waiter/cache_waiter_kqueue.c b/bin/varnishd/waiter/cache_waiter_kqueue.c
index 90ba41d..baeed5c 100644
--- a/bin/varnishd/waiter/cache_waiter_kqueue.c
+++ b/bin/varnishd/waiter/cache_waiter_kqueue.c
@@ -54,10 +54,9 @@ struct vwk {
 	pthread_t		thread;
 	double			next;
 	int			pipe[2];
-
-	VTAILQ_HEAD(,waited)	list;
-	struct lock		mtx;
+	unsigned		nwaited;
 	int			die;
+	struct lock		mtx;
 };
 
 /*--------------------------------------------------------------------*/
@@ -116,13 +115,13 @@ vwk_thread(void *priv)
 				continue;
 			}
 			CAST_OBJ_NOTNULL(wp, ke[j].udata, WAITED_MAGIC);
-			VTAILQ_REMOVE(&vwk->list, wp, list);
+			vwk->nwaited--;
 			if (kp->flags & EV_EOF)
 				Wait_Call(w, wp, WAITER_REMCLOSE, now);
 			else
 				Wait_Call(w, wp, WAITER_ACTION, now);
 		}
-		if (VTAILQ_EMPTY(&vwk->list) && vwk->die)
+		if (vwk->nwaited == 0 && vwk->die)
 			break;
 	}
 	Lck_Unlock(&vwk->mtx);
@@ -143,7 +142,7 @@ vwk_enter(void *priv, struct waited *wp)
 	CAST_OBJ_NOTNULL(vwk, priv, VWK_MAGIC);
 	EV_SET(&ke, wp->fd, EVFILT_READ, EV_ADD|EV_ONESHOT, 0, 0, wp);
 	Lck_Lock(&vwk->mtx);
-	VTAILQ_INSERT_TAIL(&vwk->list, wp, list);
+	vwk->nwaited++;
 	Wait_HeapInsert(vwk->waiter, wp);
 	AZ(kevent(vwk->kq, &ke, 1, NULL, 0, NULL));
 
@@ -170,7 +169,6 @@ vwk_init(struct waiter *w)
 
 	vwk->kq = kqueue();
 	assert(vwk->kq >= 0);
-	VTAILQ_INIT(&vwk->list);
 	Lck_New(&vwk->mtx, lck_misc);
 	AZ(pipe(vwk->pipe));
 	EV_SET(&ke, vwk->pipe[0], EVFILT_READ, EV_ADD, 0, 0, vwk);
diff --git a/bin/varnishd/waiter/waiter.h b/bin/varnishd/waiter/waiter.h
index 3d301ea..488c8e3 100644
--- a/bin/varnishd/waiter/waiter.h
+++ b/bin/varnishd/waiter/waiter.h
@@ -69,7 +69,6 @@ struct waited {
 	void			*ptr;
 	const struct waitfor	*waitfor;
 	double			idle;
-	VTAILQ_ENTRY(waited)	list;
 };
 
 /* cache_waiter.c */



More information about the varnish-commit mailing list