##// END OF EJS Templates
util: make `mmapread()` work on Windows again...
Matt Harbison -
r52823:bc9ed92d default
parent child Browse files
Show More
@@ -485,15 +485,24 def mmapread(fp, size=None, pre_populate
485 elif size is None:
485 elif size is None:
486 size = 0
486 size = 0
487 fd = getattr(fp, 'fileno', lambda: fp)()
487 fd = getattr(fp, 'fileno', lambda: fp)()
488 flags = mmap.MAP_PRIVATE
488
489 bg_populate = hasattr(osutil, "background_mmap_populate")
489 if pycompat.iswindows:
490 if pre_populate and not bg_populate:
490 _mmap = lambda fd, size: mmap.mmap(fd, size, access=mmap.ACCESS_READ)
491 flags |= getattr(mmap, 'MAP_POPULATE', 0)
491 else:
492 flags = mmap.MAP_PRIVATE
493 bg_populate = hasattr(osutil, "background_mmap_populate")
494
495 if pre_populate and not bg_populate:
496 flags |= getattr(mmap, 'MAP_POPULATE', 0)
497
498 def _mmap(fd, size) -> mmap.mmap:
499 m = mmap.mmap(fd, size, flags=flags, prot=mmap.PROT_READ)
500 if pre_populate and bg_populate:
501 osutil.background_mmap_populate(m)
502 return m
503
492 try:
504 try:
493 m = mmap.mmap(fd, size, flags=flags, prot=mmap.PROT_READ)
505 return _mmap(fd, size)
494 if pre_populate and bg_populate:
495 osutil.background_mmap_populate(m)
496 return m
497 except ValueError:
506 except ValueError:
498 # Empty files cannot be mmapped, but mmapread should still work. Check
507 # Empty files cannot be mmapped, but mmapread should still work. Check
499 # if the file is empty, and if so, return an empty buffer.
508 # if the file is empty, and if so, return an empty buffer.
General Comments 0
You need to be logged in to leave comments. Login now