]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix runtime·netpoll() to call runtime·netpollready() only once per event.
authorBill Neubauer <wcn@golang.org>
Mon, 27 May 2013 21:03:10 +0000 (05:03 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Mon, 27 May 2013 21:03:10 +0000 (05:03 +0800)
R=golang-dev, minux.ma
CC=golang-dev
https://golang.org/cl/9808043

src/pkg/runtime/netpoll_kqueue.c

index 6718c6fc8f753b9041c2408935e25e08243e01e2..3ded4ee0b0f4f8872edd90a7697f190b788b24d5 100644 (file)
@@ -74,7 +74,7 @@ runtime·netpoll(bool block)
        static int32 lasterr;
        Kevent events[64], *ev;
        Timespec ts, *tp;
-       int32 n, i;
+       int32 n, i, mode;
        G *gp;
 
        if(kq == -1)
@@ -97,10 +97,13 @@ retry:
        }
        for(i = 0; i < n; i++) {
                ev = &events[i];
+               mode = 0;
                if(ev->filter == EVFILT_READ)
-                       runtime·netpollready(&gp, (PollDesc*)ev->udata, 'r');
+                       mode += 'r';
                if(ev->filter == EVFILT_WRITE)
-                       runtime·netpollready(&gp, (PollDesc*)ev->udata, 'w');
+                       mode += 'w';
+               if(mode)
+                       runtime·netpollready(&gp, (PollDesc*)ev->udata, mode);
        }
        if(block && gp == nil)
                goto retry;