diff options
author | Alexandre Julliard <julliard@winehq.org> | 2007-02-14 18:11:40 +0100 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-02-14 15:22:08 -0800 |
commit | 78a28df9388cccb1ec85aa5642808f0d3392155f (patch) | |
tree | 6d34e910bb9eaf23e18d7e5089fb1c0c322fdcc2 /sha1_file.c | |
parent | 5faaf24634a4d3a630bd3655cc85fa96f8bc1903 (diff) | |
download | git-78a28df9388cccb1ec85aa5642808f0d3392155f.tar.gz |
sha1_file.c: Round the mmap offset to half the window size.
This ensures that a given area is mapped at most twice, and greatly
reduces the virtual address space usage.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/sha1_file.c b/sha1_file.c index 8ad7fad825..b83f59f383 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -407,7 +407,6 @@ static unsigned int peak_pack_open_windows; static unsigned int pack_open_windows; static size_t peak_pack_mapped; static size_t pack_mapped; -static size_t page_size; struct packed_git *packed_git; void pack_report() @@ -416,7 +415,7 @@ void pack_report() "pack_report: getpagesize() = %10" SZ_FMT "\n" "pack_report: core.packedGitWindowSize = %10" SZ_FMT "\n" "pack_report: core.packedGitLimit = %10" SZ_FMT "\n", - page_size, + (size_t) getpagesize(), packed_git_window_size, packed_git_limit); fprintf(stderr, @@ -662,10 +661,9 @@ unsigned char* use_pack(struct packed_git *p, break; } if (!win) { - if (!page_size) - page_size = getpagesize(); + size_t window_align = packed_git_window_size / 2; win = xcalloc(1, sizeof(*win)); - win->offset = (offset / page_size) * page_size; + win->offset = (offset / window_align) * window_align; win->len = p->pack_size - win->offset; if (win->len > packed_git_window_size) win->len = packed_git_window_size; |