diff options
author | Eli Zaretskii <eliz@gnu.org> | 2014-06-02 20:08:50 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2014-06-02 20:08:50 +0300 |
commit | 0dd0ad374ba839a268e864512886aebbe5d49dca (patch) | |
tree | a8b0dd9a8d5cad951b554b37de0d1b960dd98b37 /src/w32heap.c | |
parent | 7973d8d5facf11b6408f8e17c9ad11efc7ff6eba (diff) | |
download | emacs-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.c | 27 |
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; } |