diff options
| author | Dmitriy Vyukov <dvyukov@google.com> | 2013-08-13 12:55:57 +0400 |
|---|---|---|
| committer | Dmitriy Vyukov <dvyukov@google.com> | 2013-08-13 12:55:57 +0400 |
| commit | 9707f269c1eb7ee68a2be93e87eb49d481fb1a84 (patch) | |
| tree | c6b241f95237f196c03e6a2f1cdecc29a0c5a751 /src/pkg/runtime | |
| parent | 1ee21701c729d0ec6e9ebec5ccb8556459ea514f (diff) | |
| download | go-9707f269c1eb7ee68a2be93e87eb49d481fb1a84.tar.xz | |
runtime: fix network timers related crash
Fixes #6103.
R=golang-dev, alex.brainman
CC=golang-dev
https://golang.org/cl/12686045
Diffstat (limited to 'src/pkg/runtime')
| -rw-r--r-- | src/pkg/runtime/netpoll.goc | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/pkg/runtime/netpoll.goc b/src/pkg/runtime/netpoll.goc index ebe6defa00..da6929eed2 100644 --- a/src/pkg/runtime/netpoll.goc +++ b/src/pkg/runtime/netpoll.goc @@ -113,10 +113,13 @@ func runtime_pollWait(pd *PollDesc, mode int) (err int) { runtime·lock(pd); err = checkerr(pd, mode); if(err == 0) { - if(!netpollblock(pd, mode)) { + while(!netpollblock(pd, mode)) { err = checkerr(pd, mode); - if(err == 0) - runtime·throw("runtime_pollWait: unblocked by ioready"); + if(err != 0) + break; + // Can happen if timeout has fired and unblocked us, + // but before we had a chance to run, timeout has been reset. + // Pretend it has not happened and retry. } } runtime·unlock(pd); |
