]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix potential deadlock in netpoll on windows
authorDmitriy Vyukov <dvyukov@google.com>
Sat, 27 Jul 2013 09:46:40 +0000 (13:46 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Sat, 27 Jul 2013 09:46:40 +0000 (13:46 +0400)
If netpoll has been told to block, it must not return with nil,
otherwise scheduler assumes that netpoll is disabled.

R=golang-dev, alex.brainman
CC=golang-dev
https://golang.org/cl/11920044

src/pkg/runtime/netpoll_windows.c

index 52ba7e46e6eaf4a9fbd8454b53f41e3c750a7d17..972f1c30efb37251c4acf05714f2dc3f76e6fb70 100644 (file)
@@ -71,6 +71,8 @@ runtime·netpoll(bool block)
 
        if(iocphandle == INVALID_HANDLE_VALUE)
                return nil;
+       gp = nil;
+retry:
        o = nil;
        errno = 0;
        qty = 0;
@@ -104,7 +106,8 @@ runtime·netpoll(bool block)
        }
        o->errno = errno;
        o->qty = qty;
-       gp = nil;
        runtime·netpollready(&gp, (void*)o->runtimeCtx, mode);
+       if(block && gp == nil)
+               goto retry;
        return gp;
 }