Commit 53aab46e authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Piggy-back kevent changes on kevent wait call


git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@960 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 7082e1bf
...@@ -29,16 +29,21 @@ static int pipes[2]; ...@@ -29,16 +29,21 @@ static int pipes[2];
#define NKEV 100 #define NKEV 100
static struct kevent ki[NKEV];
static unsigned nki;
static void static void
vca_kq_sess(struct sess *sp, int arm) vca_kq_sess(struct sess *sp, int arm)
{ {
struct kevent ke;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
if (sp->fd < 0) if (sp->fd < 0)
return; return;
EV_SET(&ke, sp->fd, EVFILT_READ, arm, 0, 0, sp); EV_SET(&ki[nki], sp->fd, EVFILT_READ, arm, 0, 0, sp);
AZ(kevent(kq, &ke, 1, NULL, 0, NULL)); if (++nki == NKEV) {
AZ(kevent(kq, ki, nki, NULL, 0, NULL));
nki = 0;
}
} }
static void static void
...@@ -46,7 +51,6 @@ vca_kev(struct kevent *kp) ...@@ -46,7 +51,6 @@ vca_kev(struct kevent *kp)
{ {
int i, j; int i, j;
struct sess *sp; struct sess *sp;
struct kevent ke[NKEV];
struct sess *ss[NKEV]; struct sess *ss[NKEV];
AN(kp->udata); AN(kp->udata);
...@@ -59,13 +63,13 @@ vca_kev(struct kevent *kp) ...@@ -59,13 +63,13 @@ vca_kev(struct kevent *kp)
CHECK_OBJ_NOTNULL(ss[j], SESS_MAGIC); CHECK_OBJ_NOTNULL(ss[j], SESS_MAGIC);
assert(ss[j]->fd >= 0); assert(ss[j]->fd >= 0);
TAILQ_INSERT_TAIL(&sesshead, ss[j], list); TAILQ_INSERT_TAIL(&sesshead, ss[j], list);
EV_SET(&ke[j], ss[j]->fd, EVFILT_READ, vca_kq_sess(ss[j], EV_ADD);
EV_ADD, 0, 0, ss[j]);
j++; j++;
i -= sizeof ss[0]; i -= sizeof ss[0];
} }
assert(i == 0); assert(i == 0);
AZ(kevent(kq, ke, j, NULL, 0, NULL)); assert(j > 0);
assert(j <= NKEV);
return; return;
} }
CAST_OBJ_NOTNULL(sp, kp->udata, SESS_MAGIC); CAST_OBJ_NOTNULL(sp, kp->udata, SESS_MAGIC);
...@@ -111,9 +115,11 @@ vca_kqueue_main(void *arg) ...@@ -111,9 +115,11 @@ vca_kqueue_main(void *arg)
EV_SET(&ke[j++], pipes[0], EVFILT_READ, EV_ADD, 0, 0, pipes); EV_SET(&ke[j++], pipes[0], EVFILT_READ, EV_ADD, 0, 0, pipes);
AZ(kevent(kq, ke, j, NULL, 0, NULL)); AZ(kevent(kq, ke, j, NULL, 0, NULL));
nki = 0;
while (1) { while (1) {
n = kevent(kq, NULL, 0, ke, NKEV, NULL); n = kevent(kq, ki, nki, ke, NKEV, NULL);
assert(n >= 1 && n <= NKEV); assert(n >= 1 && n <= NKEV);
nki = 0;
for (kp = ke, j = 0; j < n; j++, kp++) { for (kp = ke, j = 0; j < n; j++, kp++) {
if (kp->filter == EVFILT_TIMER) if (kp->filter == EVFILT_TIMER)
continue; continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment