mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
ORC/ARC async progress (#15370)
* ARC/ORC: fixes memory leak for empty seqs that have a non-zero capacity * async: minor refactorings * it helps to finish a refactoring
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user