]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: does not report duplicate errors in netpoll
authorDmitriy Vyukov <dvyukov@google.com>
Tue, 26 Mar 2013 16:25:43 +0000 (20:25 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Tue, 26 Mar 2013 16:25:43 +0000 (20:25 +0400)
Prevents storm of error messages if something goes wrong.
In the case of issue 5073 the epoll fd was closed by the test.
Update #5073.

R=golang-dev, r, rsc
CC=golang-dev
https://golang.org/cl/7966043

src/pkg/runtime/netpoll_epoll.c
src/pkg/runtime/netpoll_kqueue.c

index d6ef0d1446c78b090ccf02d6ff818eb7f20a7153..9b5980700ecd8db59939dccdafc0ac98d866cb37 100644 (file)
@@ -57,6 +57,7 @@ runtime·netpollclose(int32 fd)
 G*
 runtime·netpoll(bool block)
 {
+       static int32 lasterr;
        EpollEvent events[128], *ev;
        int32 n, i, waitms, mode;
        G *gp;
@@ -69,8 +70,10 @@ runtime·netpoll(bool block)
 retry:
        n = runtime·epollwait(epfd, events, nelem(events), waitms);
        if(n < 0) {
-               if(n != -EINTR)
-                       runtime·printf("epollwait failed with %d\n", -n);
+               if(n != -EINTR && n != lasterr) {
+                       lasterr = n;
+                       runtime·printf("runtime: epollwait on fd %d failed with %d\n", epfd, -n);
+               }
                goto retry;
        }
        gp = nil;
index ad721e293eea42cf107aad937d0a4493e960bd52..0ed03d31fa39807e7c8ea15d4487cb9ef0fe003e 100644 (file)
@@ -71,6 +71,7 @@ runtime·netpollclose(int32 fd)
 G*
 runtime·netpoll(bool block)
 {
+       static int32 lasterr;
        Kevent events[64], *ev;
        Timespec ts, *tp;
        int32 n, i;
@@ -88,8 +89,10 @@ runtime·netpoll(bool block)
 retry:
        n = runtime·kevent(kq, nil, 0, events, nelem(events), tp);
        if(n < 0) {
-               if(n != -EINTR)
-                       runtime·printf("kqueue failed with %d\n", -n);
+               if(n != -EINTR && n != lasterr) {
+                       lasterr = n;
+                       runtime·printf("runtime: kevent on fd %d failed with %d\n", kq, -n);
+               }
                goto retry;
        }
        for(i = 0; i < n; i++) {