On Tue, May 07, 2013 at 12:43:48AM -0400, Ted Unangst wrote:

> If growing the current region fails, realloc will leave errno set,
> even though the function will eventually succeed.

(Late reply because I was away on vacation)

I don't think this is correct. realloc itself already takes care of this.

        -Otto



> 
> 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) {

Reply via email to