summary refs log tree commit diff stats
diff options
context:
space:
mode:
authordef <dennis@felsin9.de>2015-01-04 23:06:48 +0100
committerdef <dennis@felsin9.de>2015-01-04 23:07:21 +0100
commitf56dcd1505ea90947cd3cece1ac3ef3dcf418e21 (patch)
treeab02453fc75b6859df723d6e962371663b040f59
parentd60d0072813046dae7a00874fca601c7fce71e29 (diff)
downloadNim-f56dcd1505ea90947cd3cece1ac3ef3dcf418e21.tar.gz
Handle interrupt on epoll_wait graciously (allows strace to work)
-rw-r--r--lib/pure/selectors.nim6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/pure/selectors.nim b/lib/pure/selectors.nim
index b796dca7a..f17c6d317 100644
--- a/lib/pure/selectors.nim
+++ b/lib/pure/selectors.nim
@@ -146,7 +146,11 @@ elif defined(linux):
     ## on the ``fd``.
     result = @[]
     let evNum = epoll_wait(s.epollFD, addr s.events[0], 64.cint, timeout.cint)
-    if evNum < 0: raiseOSError(osLastError())
+    if evNum < 0:
+      let err = osLastError()
+      if err.cint == EINTR:
+        return @[]
+      raiseOSError(osLastError())
     if evNum == 0: return @[]
     for i in 0 .. <evNum:
       let fd = s.events[i].data.fd.SocketHandle