summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorEmery Hemingway <githubjunk@spam.works>2017-11-30 19:39:16 -0600
committerAndreas Rumpf <rumpf_a@web.de>2017-12-01 02:39:16 +0100
commit3181f3b04c7fe871548d127e6598d589a4800b17 (patch)
tree3479cd6e7a371b90d9e4fd29aa1d2a089129e69d /lib
parent6a101c5004c64b229a99e437af1640342aa98709 (diff)
downloadNim-3181f3b04c7fe871548d127e6598d589a4800b17.tar.gz
favor 'select' over 'poll' on Genode (#6821)
The 'poll' of the Genode C runtime is a wrapper over 'select'.
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/ioselects/ioselectors_select.nim28
-rw-r--r--lib/pure/selectors.nim2
2 files changed, 17 insertions, 13 deletions
diff --git a/lib/pure/ioselects/ioselectors_select.nim b/lib/pure/ioselects/ioselectors_select.nim
index 017d08117..c787f0070 100644
--- a/lib/pure/ioselects/ioselectors_select.nim
+++ b/lib/pure/ioselects/ioselectors_select.nim
@@ -279,8 +279,9 @@ proc updateHandle*[T](s: Selector[T], fd: SocketHandle,
         inc(s.count)
       pkey.events = events
 
-proc unregister*[T](s: Selector[T], fd: SocketHandle) =
+proc unregister*[T](s: Selector[T], fd: SocketHandle|int) =
   s.withSelectLock():
+    let fd = fd.SocketHandle
     var pkey = s.getKey(fd)
     if Event.Read in pkey.events:
       IOFD_CLR(fd, addr s.rSet)
@@ -438,16 +439,17 @@ template withData*[T](s: Selector[T], fd: SocketHandle|int, value,
                       body1, body2: untyped) =
   mixin withSelectLock
   s.withSelectLock():
-    var value: ptr T
-    let fdi = int(fd)
-    var i = 0
-    while i < FD_SETSIZE:
-      if s.fds[i].ident == fdi:
-        value = addr(s.fds[i].data)
-        break
-      inc(i)
-    if i != FD_SETSIZE:
-      body1
-    else:
-      body2
+    block:
+      var value: ptr T
+      let fdi = int(fd)
+      var i = 0
+      while i < FD_SETSIZE:
+        if s.fds[i].ident == fdi:
+          value = addr(s.fds[i].data)
+          break
+        inc(i)
+      if i != FD_SETSIZE:
+        body1
+      else:
+        body2
 
diff --git a/lib/pure/selectors.nim b/lib/pure/selectors.nim
index 3a7d1523f..518cc4bd5 100644
--- a/lib/pure/selectors.nim
+++ b/lib/pure/selectors.nim
@@ -303,6 +303,8 @@ else:
     include ioselects/ioselectors_select
   elif defined(solaris):
     include ioselects/ioselectors_poll # need to replace it with event ports
+  elif defined(genode):
+    include ioselects/ioselectors_select # TODO: use the native VFS layer
   else:
     include ioselects/ioselectors_poll