[master] a5708d5 Minor reorg of kqueue waiter for improved clarity

Poul-Henning Kamp phk at varnish-cache.org
Thu Dec 22 22:07:45 CET 2011


commit a5708d520d9e452880aa5a58f8c1065c8061e489
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Thu Dec 22 21:07:24 2011 +0000

    Minor reorg of kqueue waiter for improved clarity

diff --git a/bin/varnishd/waiter/cache_waiter_kqueue.c b/bin/varnishd/waiter/cache_waiter_kqueue.c
index e9ec1ec..7dcf7f5 100644
--- a/bin/varnishd/waiter/cache_waiter_kqueue.c
+++ b/bin/varnishd/waiter/cache_waiter_kqueue.c
@@ -86,30 +86,41 @@ vwk_kq_sess(struct vwk *vwk, struct sess *sp, short arm)
 		vwk_kq_flush(vwk);
 }
 
+/*--------------------------------------------------------------------*/
+
 static void
-vwk_kev(struct vwk *vwk, const struct kevent *kp)
+vwk_pipe_ev(struct vwk *vwk, const struct kevent *kp)
 {
 	int i, j;
-	struct sess *sp;
 	struct sess *ss[NKEV];
 
 	AN(kp->udata);
-	if (kp->udata == vwk->pipes) {
-		j = 0;
-		i = read(vwk->pipes[0], ss, sizeof ss);
-		if (i == -1 && errno == EAGAIN)
-			return;
-		while (i >= sizeof ss[0]) {
-			CHECK_OBJ_NOTNULL(ss[j], SESS_MAGIC);
-			assert(ss[j]->fd >= 0);
-			VTAILQ_INSERT_TAIL(&vwk->sesshead, ss[j], list);
-			vwk_kq_sess(vwk, ss[j], EV_ADD | EV_ONESHOT);
-			j++;
-			i -= sizeof ss[0];
-		}
-		assert(i == 0);
+	assert(kp->udata == vwk->pipes);
+	j = 0;
+	i = read(vwk->pipes[0], ss, sizeof ss);
+	if (i == -1 && errno == EAGAIN)
 		return;
+	while (i >= sizeof ss[0]) {
+		CHECK_OBJ_NOTNULL(ss[j], SESS_MAGIC);
+		assert(ss[j]->fd >= 0);
+		VTAILQ_INSERT_TAIL(&vwk->sesshead, ss[j], list);
+		vwk_kq_sess(vwk, ss[j], EV_ADD | EV_ONESHOT);
+		j++;
+		i -= sizeof ss[0];
 	}
+	assert(i == 0);
+}
+
+/*--------------------------------------------------------------------*/
+
+static void
+vwk_sess_ev(struct vwk *vwk, const struct kevent *kp)
+{
+	int i;
+	struct sess *sp;
+
+	AN(kp->udata);
+	assert(kp->udata != vwk->pipes);
 	CAST_OBJ_NOTNULL(sp, kp->udata, SESS_MAGIC);
 	DSL(0x04, SLT_Debug, sp->vsl_id, "KQ: sp %p kev data %lu flags 0x%x%s",
 	    sp, (unsigned long)kp->data, kp->flags,
@@ -171,10 +182,13 @@ vwk_thread(void *priv)
 		for (kp = ke, j = 0; j < n; j++, kp++) {
 			if (kp->filter == EVFILT_TIMER) {
 				dotimer = 1;
-				continue;
+			} else if (kp->filter == EVFILT_READ &&
+			    kp->udata == vwk->pipes) {
+				vwk_pipe_ev(vwk, kp);
+			} else {
+				assert(kp->filter == EVFILT_READ);
+				vwk_sess_ev(vwk, kp);
 			}
-			assert(kp->filter == EVFILT_READ);
-			vwk_kev(vwk, kp);
 		}
 		if (!dotimer)
 			continue;



More information about the varnish-commit mailing list