summaryrefslogtreecommitdiff
path: root/src/w32heap.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2014-06-02 20:08:50 +0300
committerEli Zaretskii <eliz@gnu.org>2014-06-02 20:08:50 +0300
commit0dd0ad374ba839a268e864512886aebbe5d49dca (patch)
treea8b0dd9a8d5cad951b554b37de0d1b960dd98b37 /src/w32heap.c
parent7973d8d5facf11b6408f8e17c9ad11efc7ff6eba (diff)
downloademacs-0dd0ad374ba839a268e864512886aebbe5d49dca.tar.gz
Minor improvement of sbrk emulation on MS-Windows.
src/w32heap.c (malloc_after_dump, realloc_after_dump): Update the emulated break value only if it goes up. (sbrk): Add assertion that the INCREMENT argument is strictly zero. Improve and correct the commentary.
Diffstat (limited to 'src/w32heap.c')
-rw-r--r--src/w32heap.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/w32heap.c b/src/w32heap.c
index 523df909165..c0a17551d27 100644
--- a/src/w32heap.c
+++ b/src/w32heap.c
@@ -299,9 +299,14 @@ malloc_after_dump (size_t size)
/* Use the new private heap. */
void *p = HeapAlloc (heap, 0, size);
- /* After dump, keep track of the last allocated byte for sbrk(0). */
+ /* After dump, keep track of the "brk value" for sbrk(0). */
if (p)
- data_region_end = p + size - 1;
+ {
+ unsigned char *new_brk = (unsigned char *)p + size;
+
+ if (new_brk > data_region_end)
+ data_region_end = new_brk;
+ }
else
errno = ENOMEM;
return p;
@@ -391,9 +396,14 @@ realloc_after_dump (void *ptr, size_t size)
else
errno = ENOMEM;
}
- /* After dump, keep track of the last allocated byte for sbrk(0). */
+ /* After dump, keep track of the "brk value" for sbrk(0). */
if (p)
- data_region_end = p + size - 1;
+ {
+ unsigned char *new_brk = (unsigned char *)p + size;
+
+ if (new_brk > data_region_end)
+ data_region_end = new_brk;
+ }
return p;
}
@@ -497,10 +507,11 @@ getpagesize (void)
void *
sbrk (ptrdiff_t increment)
{
- /* The data_region_end address is the one of the last byte
- allocated. The sbrk() function is not emulated at all, except
- for a 0 value of its parameter. This is needed by the emacs lisp
- function `memory-limit'. */
+ /* data_region_end is the address beyond the last allocated byte.
+ The sbrk() function is not emulated at all, except for a 0 value
+ of its parameter. This is needed by the Emacs Lisp function
+ `memory-limit'. */
+ eassert (increment == 0);
return data_region_end;
}