From ee285725a94584b6284871103a8ff3fe2070f7f1 Mon Sep 17 00:00:00 2001 From: Brandon Low Date: Sun, 6 Feb 2011 22:06:05 -0800 Subject: [PATCH] mmap: Make closing source file optional New index file formats require this behavior (bloom, midx3, etc.) Signed-off-by: Brandon Low --- lib/bup/helpers.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/bup/helpers.py b/lib/bup/helpers.py index 931d43d..7b5eead 100644 --- a/lib/bup/helpers.py +++ b/lib/bup/helpers.py @@ -450,7 +450,7 @@ def slashappend(s): return s -def _mmap_do(f, sz, flags, prot): +def _mmap_do(f, sz, flags, prot, close): if not sz: st = os.fstat(f.fileno()) sz = st.st_size @@ -460,24 +460,26 @@ def _mmap_do(f, sz, flags, prot): # no elements :) return '' map = mmap.mmap(f.fileno(), sz, flags, prot) - f.close() # map will persist beyond file close + if close: + f.close() # map will persist beyond file close return map -def mmap_read(f, sz = 0): +def mmap_read(f, sz = 0, close=True): """Create a read-only memory mapped region on file 'f'. If sz is 0, the region will cover the entire file. """ - return _mmap_do(f, sz, mmap.MAP_PRIVATE, mmap.PROT_READ) + return _mmap_do(f, sz, mmap.MAP_PRIVATE, mmap.PROT_READ, close) -def mmap_readwrite(f, sz = 0): +def mmap_readwrite(f, sz = 0, close=True): """Create a read-write memory mapped region on file 'f'. If sz is 0, the region will cover the entire file. """ - return _mmap_do(f, sz, mmap.MAP_SHARED, mmap.PROT_READ|mmap.PROT_WRITE) + return _mmap_do(f, sz, mmap.MAP_SHARED, mmap.PROT_READ|mmap.PROT_WRITE, + close) def parse_num(s): -- 2.39.2