From 063f42c4b7bd01ca68dc3ecad69ada4dacf25ebe Mon Sep 17 00:00:00 2001 From: phk Date: Mon, 11 Sep 2006 10:14:45 +0000 Subject: [PATCH] Piggy-back kevent changes on kevent wait call git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@960 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- .../bin/varnishd/cache_acceptor_kqueue.c | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c b/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c index 58132a51..fbf20f5d 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c +++ b/varnish-cache/bin/varnishd/cache_acceptor_kqueue.c @@ -29,16 +29,21 @@ static int pipes[2]; #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 @@ vca_kev(struct kevent *kp) { int i, j; struct sess *sp; - struct kevent ke[NKEV]; struct sess *ss[NKEV]; AN(kp->udata); @@ -59,13 +63,13 @@ vca_kev(struct kevent *kp) 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 @@ vca_kqueue_main(void *arg) 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; -- 2.39.5