diff options
author | Emery Hemingway <githubjunk@spam.works> | 2017-11-30 19:39:16 -0600 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-12-01 02:39:16 +0100 |
commit | 3181f3b04c7fe871548d127e6598d589a4800b17 (patch) | |
tree | 3479cd6e7a371b90d9e4fd29aa1d2a089129e69d /lib | |
parent | 6a101c5004c64b229a99e437af1640342aa98709 (diff) | |
download | Nim-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.nim | 28 | ||||
-rw-r--r-- | lib/pure/selectors.nim | 2 |
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 |