2006-08-27  Ulrich Drepper  <drepper@redhat.com>
	[BZ #2684]
	* malloc/malloc.c (public_rEALLOc): Try harder by using other
	arenas if allocation failed.
	Patch mostly by Jan Edler <jan.edler@indexengines.com>.
This commit is contained in:
Ulrich Drepper 2006-08-28 00:58:32 +00:00
parent 41999a1a37
commit 07014fcacd
2 changed files with 30 additions and 0 deletions

View file

@ -1,3 +1,10 @@
2006-08-27 Ulrich Drepper <drepper@redhat.com>
[BZ #2684]
* malloc/malloc.c (public_rEALLOc): Try harder by using other
arenas if allocation failed.
Patch mostly by Jan Edler <jan.edler@indexengines.com>.
2006-08-26 Ulrich Drepper <drepper@redhat.com>
* malloc/malloc.c (bin_at): Rewrite to be more clear and to not

View file

@ -3625,6 +3625,29 @@ public_rEALLOc(Void_t* oldmem, size_t bytes)
(void)mutex_unlock(&ar_ptr->mutex);
assert(!newp || chunk_is_mmapped(mem2chunk(newp)) ||
ar_ptr == arena_for_chunk(mem2chunk(newp)));
if (newp == NULL)
{
/* Try harder to allocate memory in other arenas. */
newp = public_mALLOc(bytes);
if (newp != NULL)
{
MALLOC_COPY (newp, oldmem, oldsize - 2 * SIZE_SZ);
#if THREAD_STATS
if(!mutex_trylock(&ar_ptr->mutex))
++(ar_ptr->stat_lock_direct);
else {
(void)mutex_lock(&ar_ptr->mutex);
++(ar_ptr->stat_lock_wait);
}
#else
(void)mutex_lock(&ar_ptr->mutex);
#endif
_int_free(ar_ptr, oldmem);
(void)mutex_unlock(&ar_ptr->mutex);
}
}
return newp;
}
#ifdef libc_hidden_def