From: Dmitriy Vyukov Date: Sat, 27 Jul 2013 09:46:40 +0000 (+0400) Subject: runtime: fix potential deadlock in netpoll on windows X-Git-Tag: go1.2rc2~929 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=91d35ad1b86bd9835596704e8ecf1856d3851390;p=gostls13.git runtime: fix potential deadlock in netpoll on windows 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 --- diff --git a/src/pkg/runtime/netpoll_windows.c b/src/pkg/runtime/netpoll_windows.c index 52ba7e46e6..972f1c30ef 100644 --- a/src/pkg/runtime/netpoll_windows.c +++ b/src/pkg/runtime/netpoll_windows.c @@ -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; }