diff options
author | cheatfate <ka@hardcore.kiev.ua> | 2017-01-28 10:34:13 +0200 |
---|---|---|
committer | cheatfate <ka@hardcore.kiev.ua> | 2017-01-28 10:34:13 +0200 |
commit | 210ac5c1383ec4f3680c5da3fadb75cf4153b0bf (patch) | |
tree | dded22da50cfd3f4fedb7ce8ee43aa6016323e82 | |
parent | efe65e2255f19dbb077c8176cea2b8f99957f661 (diff) | |
download | Nim-210ac5c1383ec4f3680c5da3fadb75cf4153b0bf.tar.gz |
One more fix for #5290.
-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: |