If growing the current region fails, realloc will leave errno set,
even though the function will eventually succeed.
Index: stdlib/malloc.c
===================================================================
RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
retrieving revision 1.149
diff -u -p -r1.149 malloc.c
--- stdlib/malloc.c 22 Dec 2012 07:32:17 -0000 1.149
+++ stdlib/malloc.c 7 May 2013 04:41:45 -0000
@@ -1297,6 +1297,7 @@ orealloc(void *p, size_t newsz, void *f)
if (!mopts.malloc_guard) {
void *hint = (char *)p + roldsz;
size_t needed = rnewsz - roldsz;
+ int saved_errno = errno;
STATS_INC(g_pool->cheap_realloc_tries);
zapcacheregion(g_pool, hint, needed);
@@ -1317,6 +1318,7 @@ orealloc(void *p, size_t newsz, void *f)
if (munmap(q, needed))
wrterror("munmap", q);
}
+ errno = saved_errno;
}
} else if (rnewsz < roldsz) {
if (mopts.malloc_guard) {