From: Bill Neubauer Date: Mon, 27 May 2013 21:03:10 +0000 (+0800) Subject: runtime: fix runtime·netpoll() to call runtime·netpollready() only once per event. X-Git-Tag: go1.2rc2~1401 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=82ef961af59fdabc1a956ba6d7bc0c0b961172b2;p=gostls13.git runtime: fix runtime·netpoll() to call runtime·netpollready() only once per event. R=golang-dev, minux.ma CC=golang-dev https://golang.org/cl/9808043 --- diff --git a/src/pkg/runtime/netpoll_kqueue.c b/src/pkg/runtime/netpoll_kqueue.c index 6718c6fc8f..3ded4ee0b0 100644 --- a/src/pkg/runtime/netpoll_kqueue.c +++ b/src/pkg/runtime/netpoll_kqueue.c @@ -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;