diff options
-rw-r--r-- | compiler/ccgexprs.nim | 2 | ||||
-rw-r--r-- | lib/pure/asyncdispatch.nim | 15 | ||||
-rw-r--r-- | lib/pure/ioselects/ioselectors_kqueue.nim | 4 |
3 files changed, 10 insertions, 11 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 0d235f62e..83f7f7278 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -2164,7 +2164,7 @@ proc genMove(p: BProc; n: PNode; d: var TLoc) = # generated by liftdestructors: var src: TLoc initLocExpr(p, n[2], src) - linefmt(p, cpsStmts, "if ($1.len && $1.p != $2.p) {", [rdLoc(a), rdLoc(src)]) + linefmt(p, cpsStmts, "if ($1.p != $2.p) {", [rdLoc(a), rdLoc(src)]) genStmts(p, n[3]) linefmt(p, cpsStmts, "}$n$1.len = $2.len; $1.p = $2.p;$n", [rdLoc(a), rdLoc(src)]) else: diff --git a/lib/pure/asyncdispatch.nim b/lib/pure/asyncdispatch.nim index 5cb56f4e4..d8b274c34 100644 --- a/lib/pure/asyncdispatch.nim +++ b/lib/pure/asyncdispatch.nim @@ -1198,6 +1198,11 @@ else: let p = getGlobalDispatcher() not p.selector.isEmpty() or p.timers.len != 0 or p.callbacks.len != 0 + proc prependSeq(dest: var seq[Callback]; src: sink seq[Callback]) = + let old = move dest + dest = src + dest.add old + proc processBasicCallbacks( fd: AsyncFD, event: Event ): tuple[readCbListCount, writeCbListCount: int] = @@ -1246,14 +1251,8 @@ else: withData(selector, fd.int, fdData) do: # Descriptor is still present in the queue. case event - of Event.Read: - let oldReadList = move fdData.readList - fdData.readList = move newList - fdData.readList.add oldReadList - of Event.Write: - let oldWriteList = move fdData.writeList - fdData.writeList = move newList - fdData.writeList.add oldWriteList + of Event.Read: prependSeq(fdData.readList, newList) + of Event.Write: prependSeq(fdData.writeList, newList) else: assert false, "Cannot process callbacks for " & $event diff --git a/lib/pure/ioselects/ioselectors_kqueue.nim b/lib/pure/ioselects/ioselectors_kqueue.nim index 7635a04d5..a65be9842 100644 --- a/lib/pure/ioselects/ioselectors_kqueue.nim +++ b/lib/pure/ioselects/ioselectors_kqueue.nim @@ -616,7 +616,7 @@ template withData*[T](s: Selector[T], fd: SocketHandle|int, value, let fdi = int(fd) s.checkFd(fdi) if fdi in s: - var value = addr(s.getData(fdi)) + var value = addr(s.fds[fdi].data) body template withData*[T](s: Selector[T], fd: SocketHandle|int, value, body1, @@ -625,7 +625,7 @@ template withData*[T](s: Selector[T], fd: SocketHandle|int, value, body1, let fdi = int(fd) s.checkFd(fdi) if fdi in s: - var value = addr(s.getData(fdi)) + var value = addr(s.fds[fdi].data) body1 else: body2 |