few notes about the remaining problems with retired buffers
This commit is contained in:
parent
55f8ed2452
commit
67f37264b3
2 changed files with 8 additions and 2 deletions
|
|
@ -213,7 +213,12 @@ proc setLengthSeq(seq: PGenericSeq, elemSize, newLen: int): PGenericSeq {.
|
|||
doDecRef(gch.tempStack.d[i], LocalHeap, MaybeCyclic)
|
||||
gch.tempStack.len = len0
|
||||
|
||||
# and set the memory to nil:
|
||||
# XXX: zeroing out the memory can still result in crashes if a wiped-out
|
||||
# cell is aliased by another pointer (ie proc paramter or a let variable).
|
||||
# This is a tought problem, because even if we don't zeroMem here, in the
|
||||
# presense of user defined destructors, the user will expect the cell to be
|
||||
# "destroyed" thus creating the same problem. We can destoy the cell in the
|
||||
# finalizer of the sequence, but this makes destruction non-deterministic.
|
||||
zeroMem(cast[pointer](cast[TAddress](result) +% GenericSeqSize +%
|
||||
(newLen*%elemSize)), (result.len-%newLen) *% elemSize)
|
||||
result.len = newLen
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue