From 82ef961af59fdabc1a956ba6d7bc0c0b961172b2 Mon Sep 17 00:00:00 2001 From: Bill Neubauer Date: Tue, 28 May 2013 05:03:10 +0800 Subject: [PATCH] =?utf8?q?runtime:=20fix=20runtime=C2=B7netpoll()=20to=20c?= =?utf8?q?all=20runtime=C2=B7netpollready()=20only=20once=20per=20event.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit R=golang-dev, minux.ma CC=golang-dev https://golang.org/cl/9808043 --- src/pkg/runtime/netpoll_kqueue.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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; -- 2.48.1