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