__libc_lock_unlock (main_arena.mutex);
if (!oldp)
malloc_printerr ("realloc(): invalid pointer");
- const INTERNAL_SIZE_T oldchsize = CHUNK_AVAILABLE_SIZE (oldp);
+ const INTERNAL_SIZE_T oldsize = chunksize (oldp);
if (!checked_request2size (rb, &chnb))
goto invert;
else
#endif
{
- if (oldchsize >= chnb)
+ /* Note the extra SIZE_SZ overhead. */
+ if (oldsize - SIZE_SZ >= chnb)
newmem = oldmem; /* do nothing */
else
{
newmem = _int_malloc (&main_arena, rb);
if (newmem)
{
- memcpy (newmem, oldmem, oldchsize - CHUNK_HDR_SZ);
+ memcpy (newmem, oldmem, oldsize - CHUNK_HDR_SZ);
munmap_chunk (oldp);
}
}
else
{
top_check ();
- newmem = _int_realloc (&main_arena, oldp, oldchsize, chnb);
+ newmem = _int_realloc (&main_arena, oldp, oldsize, chnb);
}
DIAG_PUSH_NEEDS_COMMENT;