Fixes incorrect fd==0 test on Unix; Conserves handles by default. (#5512)
* Fix 2 problems. First, 0 is a valid fd on Unix (easily gotten if user first closes all fds and then starts using memfiles). Use -1 instead for an invalid fd. Second, it is best practice to conserve open fds on Unix and file handles on Windows. These handles are not needed unless the user wants to remap the memory with ``mapMem`` (or a hypothetical future ``proc resize``). Adding a new bool param ``allowRemap=false`` to ``memfiles.open`` solves this cleanly in a "mostly" backward compatible way. This is only "mostly" because the default ``false`` case does not keep unneeded resources allocated, but that most sensible default means that any ``mapMem`` callers need to fix all their open calls to have allowRemap=true, as this PR also does for tmemfiles2.nim. * Include backwards compatibility note.
This commit is contained in:
parent
9fda97b058
commit
d59441340d
3 changed files with 24 additions and 9 deletions
|
|
@ -18,7 +18,7 @@ mm = memfiles.open(fn, mode = fmReadWrite, newFileSize = 20)
|
|||
mm.close()
|
||||
|
||||
# read, change
|
||||
mm_full = memfiles.open(fn, mode = fmWrite, mappedSize = -1)
|
||||
mm_full = memfiles.open(fn, mode = fmWrite, mappedSize = -1, allowRemap = true)
|
||||
echo "Full read size: ",mm_full.size
|
||||
p = mm_full.mapMem(fmReadWrite, 20, 0)
|
||||
var p2 = cast[cstring](p)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue