From: Brandon Low Date: Mon, 7 Feb 2011 06:06:05 +0000 (-0800) Subject: mmap: Make closing source file optional X-Git-Tag: bup-0.23~17^2~14 X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;ds=sidebyside;h=ee285725a94584b6284871103a8ff3fe2070f7f1;p=bup.git mmap: Make closing source file optional New index file formats require this behavior (bloom, midx3, etc.) Signed-off-by: Brandon Low --- 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):