r960 - trunk/varnish-cache/bin/varnishd

phk at projects.linpro.no phk at projects.linpro.no
Mon Sep 11 12:14:45 CEST 2006


Author: phk
Date: 2006-09-11 12:14:45 +0200 (Mon, 11 Sep 2006)
New Revision: 960

Modified:
   trunk/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c
Log:
Piggy-back kevent changes on kevent wait call


Modified: trunk/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c	2006-09-11 10:14:29 UTC (rev 959)
+++ trunk/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c	2006-09-11 10:14:45 UTC (rev 960)
@@ -29,16 +29,21 @@
 
 #define NKEV	100
 
+static struct kevent ki[NKEV];
+static unsigned nki;
+
 static void
 vca_kq_sess(struct sess *sp, int arm)
 {
-	struct kevent ke;
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 	if (sp->fd < 0)
 		return;
-	EV_SET(&ke, sp->fd, EVFILT_READ, arm, 0, 0, sp);
-	AZ(kevent(kq, &ke, 1, NULL, 0, NULL));
+	EV_SET(&ki[nki], sp->fd, EVFILT_READ, arm, 0, 0, sp);
+	if (++nki == NKEV) {
+		AZ(kevent(kq, ki, nki, NULL, 0, NULL));
+		nki = 0;
+	}
 }
 
 static void
@@ -46,7 +51,6 @@
 {
 	int i, j;
 	struct sess *sp;
-	struct kevent ke[NKEV];
 	struct sess *ss[NKEV];
 
 	AN(kp->udata);
@@ -59,13 +63,13 @@
 			CHECK_OBJ_NOTNULL(ss[j], SESS_MAGIC);
 			assert(ss[j]->fd >= 0);
 			TAILQ_INSERT_TAIL(&sesshead, ss[j], list);
-			EV_SET(&ke[j], ss[j]->fd, EVFILT_READ,
-			    EV_ADD, 0, 0, ss[j]);
+			vca_kq_sess(ss[j], EV_ADD);
 			j++;
 			i -= sizeof ss[0];
 		}
 		assert(i == 0);
-		AZ(kevent(kq, ke, j, NULL, 0, NULL));
+		assert(j > 0);
+		assert(j <= NKEV);
 		return;
 	}
 	CAST_OBJ_NOTNULL(sp, kp->udata, SESS_MAGIC);
@@ -111,9 +115,11 @@
 	EV_SET(&ke[j++], pipes[0], EVFILT_READ, EV_ADD, 0, 0, pipes);
 	AZ(kevent(kq, ke, j, NULL, 0, NULL));
 
+	nki = 0;
 	while (1) {
-		n = kevent(kq, NULL, 0, ke, NKEV, NULL);
+		n = kevent(kq, ki, nki, ke, NKEV, NULL);
 		assert(n >= 1 && n <= NKEV);
+		nki = 0;
 		for (kp = ke, j = 0; j < n; j++, kp++) {
 			if (kp->filter == EVFILT_TIMER)
 				continue; 




More information about the varnish-commit mailing list