diff options
author | cheatfate <ka@hardcore.kiev.ua> | 2016-06-14 17:22:34 +0300 |
---|---|---|
committer | cheatfate <ka@hardcore.kiev.ua> | 2016-06-14 17:22:34 +0300 |
commit | efb4d974678aec8ed55e4001358c97243cc6cbab (patch) | |
tree | e557b4f6e74db494f4ef1e5c702ea0d2500c2c9b | |
parent | 5e8646583decc45f820f4d3a1f326d23d9396d9d (diff) | |
download | Nim-efb4d974678aec8ed55e4001358c97243cc6cbab.tar.gz |
Resolve #4334
-rw-r--r-- | lib/pure/selectors.nim | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/pure/selectors.nim b/lib/pure/selectors.nim index 89e92c133..098b78c95 100644 --- a/lib/pure/selectors.nim +++ b/lib/pure/selectors.nim @@ -132,11 +132,12 @@ elif defined(linux): s.fds[fd].events = events proc unregister*(s: var Selector, fd: SocketHandle) = - if epoll_ctl(s.epollFD, EPOLL_CTL_DEL, fd, nil) != 0: - let err = osLastError() - if err.cint notin {ENOENT, EBADF}: - # TODO: Why do we sometimes get an EBADF? Is this normal? - raiseOSError(err) + if s.fds[fd].events != {}: + if epoll_ctl(s.epollFD, EPOLL_CTL_DEL, fd, nil) != 0: + let err = osLastError() + if err.cint notin {ENOENT, EBADF}: + # TODO: Why do we sometimes get an EBADF? Is this normal? + raiseOSError(err) s.fds.del(fd) proc close*(s: var Selector) = |