diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2017-01-29 13:39:32 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-01-29 13:39:32 +0100 |
commit | eca72755bb035515a5bd699ffd5e9c255d6a8758 (patch) | |
tree | 2f217831393fb737a94d3f3d47cf6d8b08a29296 | |
parent | 3aeece4456ba5a6d6295ed983c186b20b62b7236 (diff) | |
parent | 210ac5c1383ec4f3680c5da3fadb75cf4153b0bf (diff) | |
download | Nim-eca72755bb035515a5bd699ffd5e9c255d6a8758.tar.gz |
Merge branch 'Fix5290_1' of https://github.com/cheatfate/Nim into cheatfate-Fix5290_1
-rw-r--r-- | lib/pure/ioselects/ioselectors_kqueue.nim | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/lib/pure/ioselects/ioselectors_kqueue.nim b/lib/pure/ioselects/ioselectors_kqueue.nim index bb94ea172..3d2aae180 100644 --- a/lib/pure/ioselects/ioselectors_kqueue.nim +++ b/lib/pure/ioselects/ioselectors_kqueue.nim @@ -93,6 +93,16 @@ proc newSelector*[T](): Selector[T] = if kqFD < 0: raiseIOSelectorsError(osLastError()) + # we allocating empty socket to duplicate it handle in future, to get unique + # indexes for `fds` array. This is needed to properly identify + # {Event.Timer, Event.Signal, Event.Process} events. + let usock = posix.socket(posix.AF_INET, posix.SOCK_STREAM, + posix.IPPROTO_TCP).cint + if usock == -1: + let err = osLastError() + discard posix.close(kqFD) + raiseIOSelectorsError(err) + when hasThreadSupport: result = cast[Selector[T]](allocShared0(sizeof(SelectorImpl[T]))) result.fds = allocSharedArray[SelectorKey[T]](maxFD) @@ -104,17 +114,10 @@ proc newSelector*[T](): Selector[T] = result.fds = newSeq[SelectorKey[T]](maxFD) result.changes = newSeqOfCap[KEvent](MAX_KQUEUE_EVENTS) + result.sock = usock result.kqFD = kqFD result.maxFD = maxFD.int - # we allocating empty socket to duplicate it handle in future, to get unique - # indexes for `fds` array. This is needed to properly identify - # {Event.Timer, Event.Signal, Event.Process} events. - result.sock = posix.socket(posix.AF_INET, posix.SOCK_STREAM, - posix.IPPROTO_TCP).cint - if result.sock == -1: - raiseIOSelectorsError(osLastError()) - proc close*[T](s: Selector[T]) = let res = posix.close(s.kqFD) when hasThreadSupport: |