wrapper: move xmmap() to sha1_file.c
wrapper.o depends on sha1_file.o for a number of reasons. One is release_pack_memory(). xmmap function calls mmap, discarding unused pack windows when necessary to relieve memory pressure. Simple git programs using wrapper.o as a friendly libc do not need this functionality. So move xmmap to sha1_file.o, where release_pack_memory() is. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
6f10c4103d
commit
58ecbd5ede
15
sha1_file.c
15
sha1_file.c
@ -576,6 +576,21 @@ void release_pack_memory(size_t need, int fd)
|
|||||||
; /* nothing */
|
; /* nothing */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
if (ret == MAP_FAILED) {
|
||||||
|
if (!length)
|
||||||
|
return NULL;
|
||||||
|
release_pack_memory(length, fd);
|
||||||
|
ret = mmap(start, length, prot, flags, fd, offset);
|
||||||
|
if (ret == MAP_FAILED)
|
||||||
|
die_errno("Out of memory? mmap failed");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void close_pack_windows(struct packed_git *p)
|
void close_pack_windows(struct packed_git *p)
|
||||||
{
|
{
|
||||||
while (p->windows) {
|
while (p->windows) {
|
||||||
|
15
wrapper.c
15
wrapper.c
@ -108,21 +108,6 @@ void *xcalloc(size_t nmemb, size_t size)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
if (ret == MAP_FAILED) {
|
|
||||||
if (!length)
|
|
||||||
return NULL;
|
|
||||||
release_pack_memory(length, fd);
|
|
||||||
ret = mmap(start, length, prot, flags, fd, offset);
|
|
||||||
if (ret == MAP_FAILED)
|
|
||||||
die_errno("Out of memory? mmap failed");
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* xread() is the same a read(), but it automatically restarts read()
|
* xread() is the same a read(), but it automatically restarts read()
|
||||||
* operations with a recoverable error (EAGAIN and EINTR). xread()
|
* operations with a recoverable error (EAGAIN and EINTR). xread()
|
||||||
|
Loading…
Reference in New Issue
Block a user