summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2017-01-29 13:39:32 +0100
committerAndreas Rumpf <rumpf_a@web.de>2017-01-29 13:39:32 +0100
commiteca72755bb035515a5bd699ffd5e9c255d6a8758 (patch)
tree2f217831393fb737a94d3f3d47cf6d8b08a29296
parent3aeece4456ba5a6d6295ed983c186b20b62b7236 (diff)
parent210ac5c1383ec4f3680c5da3fadb75cf4153b0bf (diff)
downloadNim-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.nim19
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: