Mercurial > public > mercurial-scm > hg
comparison mercurial/revlogutils/nodemap.py @ 51653:21442f87f7fa stable
mmap: only use mmap to read revlog persistent nodemap if it is safe
Cf `is_mmap_safe` docstring.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 03 Jul 2024 12:32:57 +0200 |
parents | 8e24f4f86ba8 |
children | 493034cc3265 |
comparison
equal
deleted
inserted
replaced
51652:8e24f4f86ba8 | 51653:21442f87f7fa |
---|---|
72 use_mmap = revlog.opener.options.get(b"persistent-nodemap.mmap") | 72 use_mmap = revlog.opener.options.get(b"persistent-nodemap.mmap") |
73 | 73 |
74 test_race_hook_1() | 74 test_race_hook_1() |
75 try: | 75 try: |
76 with revlog.opener(filename) as fd: | 76 with revlog.opener(filename) as fd: |
77 if use_mmap: | 77 if use_mmap and revlog.opener.is_mmap_safe(filename): |
78 try: | 78 try: |
79 data = util.buffer(util.mmapread(fd, data_length)) | 79 data = util.buffer(util.mmapread(fd, data_length)) |
80 except ValueError: | 80 except ValueError: |
81 # raised when the read file is too small | 81 # raised when the read file is too small |
82 data = b'' | 82 data = b'' |
203 tr.add(datafile, target_docket.data_length) | 203 tr.add(datafile, target_docket.data_length) |
204 with revlog.opener(datafile, b'r+') as fd: | 204 with revlog.opener(datafile, b'r+') as fd: |
205 fd.seek(target_docket.data_length) | 205 fd.seek(target_docket.data_length) |
206 fd.write(data) | 206 fd.write(data) |
207 if feed_data: | 207 if feed_data: |
208 if use_mmap: | 208 if use_mmap and revlog.opener.is_mmap_safe(datafile): |
209 fd.flush() | 209 fd.flush() |
210 new_data = util.buffer(util.mmapread(fd, new_length)) | 210 new_data = util.buffer(util.mmapread(fd, new_length)) |
211 else: | 211 else: |
212 fd.seek(0) | 212 fd.seek(0) |
213 new_data = fd.read(new_length) | 213 new_data = fd.read(new_length) |
236 # simply empty them. | 236 # simply empty them. |
237 tr.addabort(callback_id, abortck) | 237 tr.addabort(callback_id, abortck) |
238 with revlog.opener(datafile, b'w+') as fd: | 238 with revlog.opener(datafile, b'w+') as fd: |
239 fd.write(data) | 239 fd.write(data) |
240 if feed_data: | 240 if feed_data: |
241 if use_mmap: | 241 if use_mmap and revlog.opener.is_mmap_safe(datafile): |
242 fd.flush() | 242 fd.flush() |
243 new_data = util.buffer(util.mmapread(fd, len(data))) | 243 new_data = util.buffer(util.mmapread(fd, len(data))) |
244 else: | 244 else: |
245 new_data = data | 245 new_data = data |
246 target_docket.data_length = len(data) | 246 target_docket.data_length = len(data) |