[PATCH v3 2/3] Introduce GIT_MMAP_LIMIT to allow testing expected mmap size
- From
Steffen Prohaska <prohaska@zib.de>
- Date
- Aug 21, 2014, 16:05 UTC
- Message-ID
- <1408637110-15669-3-git-send-email-prohaska@zib.de>
- In-Reply-To
- <1408637110-15669-1-git-send-email-prohaska@zib.de>
Similar to testing expectations about malloc with GIT_ALLOC_LIMIT (see commit d41489), it can be useful to test expectations about mmap.
This introduces a new environment variable GIT_MMAP_LIMIT to limit the largest allowed mmap length (in KB). xmmap() is modified to check the limit. Together with GIT_ALLOC_LIMIT tests can now easily confirm expectations about memory consumption.
GIT_ALLOC_LIMIT will be used in the next commit to test that data will be streamed to an external filter without mmaping the entire file.
[commit d41489]: d41489a6424308dc9a0409bc2f6845aa08bd4f7d Add more large
blob test casesSigned-off-by: Steffen Prohaska <prohaska@zib.de> --- sha1_file.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/sha1_file.c b/sha1_file.c index 00c07f2..88d64c0 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -663,10 +663,25 @@ void release_pack_memory(size_t need) ; /* nothing */ } +static void mmap_limit_check(size_t length) +{ + static int limit = -1; + if (limit == -1) { + const char *env = getenv("GIT_MMAP_LIMIT"); + limit = env ? atoi(env) * 1024 : 0; + } + if (limit && length > limit) + die("attempting to mmap %"PRIuMAX" over limit %d", + (intmax_t)length, limit); +} + void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) { - void *ret = mmap(start, length, prot, flags, fd, offset); + void *ret; + + mmap_limit_check(length); + ret = mmap(start, length, prot, flags, fd, offset); if (ret == MAP_FAILED) { if (!length) return NULL;
-- 2.1.0.6.gb452461