]> err.no Git - varnish/commitdiff
Pull out up to 20 kevents at time instead of just one.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Sun, 20 Aug 2006 12:15:15 +0000 (12:15 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Sun, 20 Aug 2006 12:15:15 +0000 (12:15 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@845 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache_acceptor.c

index a547301d589b8622749a57b00dc639e7e6c5f63f..7a30d261b846a5a36a109cdfb2987ac10966f6c7 100644 (file)
@@ -422,11 +422,13 @@ accept_f(int fd)
        vca_kq_sess(sp, EV_ADD);
 }
 
+#define NKEV   20
+
 static void *
 vca_main(void *arg)
 {
-       struct kevent ke;
-       int i;
+       struct kevent ke[10];
+       int i, j, n;
        struct sess *sp;
 
        (void)arg;
@@ -436,44 +438,38 @@ vca_main(void *arg)
 
 
        if (heritage.socket >= 0) {
-               memset(&ke, 0, sizeof ke);
-               EV_SET(&ke, heritage.socket,
+               memset(&ke[0], 0, sizeof ke[0]);
+               EV_SET(&ke[0], heritage.socket,
                    EVFILT_READ, EV_ADD, 0, 0, accept_f);
-               AZ(kevent(kq, &ke, 1, NULL, 0, NULL));
+               AZ(kevent(kq, &ke[0], 1, NULL, 0, NULL));
        }
 
        while (1) {
-               i = kevent(kq, NULL, 0, &ke, 1, NULL);
-               assert(i == 1);
-#if 0
-               printf("i = %d\n", i);
-               printf("ke.ident = %ju\n", (uintmax_t)ke.ident);
-               printf("ke.filter = %u\n", ke.filter);
-               printf("ke.flags = %u\n", ke.flags);
-               printf("ke.fflags = %u\n", ke.fflags);
-               printf("ke.data = %jd\n", (intmax_t)ke.data);
-               printf("ke.udata = %p\n", ke.udata);
-#endif
-               if (ke.udata == accept_f) {
-                       accept_f(ke.ident);
-                       continue;
-               }
-               CAST_OBJ_NOTNULL(sp, ke.udata, SESS_MAGIC);
-               if (ke.filter == EVFILT_READ) {
-                       i = http_RecvSome(sp->fd, sp->http);
-                       if (i == -1)
+               n = kevent(kq, NULL, 0, ke, NKEV, NULL);
+               assert(n >= 1);
+               VSL(SLT_Debug, 0, "KQ %d", n);
+               for (j = 0; j < n; j++) {
+                       if (ke[j].udata == accept_f) {
+                               accept_f(ke[j].ident);
+                               continue;
+                       }
+                       CAST_OBJ_NOTNULL(sp, ke[j].udata, SESS_MAGIC);
+                       if (ke[j].filter == EVFILT_READ) {
+                               i = http_RecvSome(sp->fd, sp->http);
+                               if (i == -1)
+                                       continue;
+                               vca_kq_sess(sp, EV_DELETE);
+                               vca_handover(sp, i);
+                               continue;
+                       }
+                       if (ke[j].filter == EVFILT_TIMER) {
+                               vca_kq_sess(sp, EV_DELETE);
+                               vca_close_session(sp, "timeout");
+                               vca_return_session(sp);
                                continue;
-                       vca_kq_sess(sp, EV_DELETE);
-                       vca_handover(sp, i);
-                       continue;
+                       } 
+                       INCOMPL();
                }
-               if (ke.filter == EVFILT_TIMER) {
-                       vca_kq_sess(sp, EV_DELETE);
-                       vca_close_session(sp, "timeout");
-                       vca_return_session(sp);
-                       continue;
-               } 
-               INCOMPL();
        }
 
        INCOMPL();