Fix a prof-related bug in realloc().

Fix realloc() such that it only records the object passed in as freed if
no OOM error occurs.
This commit is contained in:
Jason Evans 2011-08-30 23:37:29 -07:00
parent 749c2a0ab6
commit 46405e670f

View File

@ -1299,6 +1299,7 @@ JEMALLOC_P(realloc)(void *ptr, size_t size)
old_ctx = prof_ctx_get(ptr); old_ctx = prof_ctx_get(ptr);
PROF_ALLOC_PREP(1, usize, cnt); PROF_ALLOC_PREP(1, usize, cnt);
if (cnt == NULL) { if (cnt == NULL) {
old_ctx = NULL;
ret = NULL; ret = NULL;
goto OOM; goto OOM;
} }
@ -1308,8 +1309,13 @@ JEMALLOC_P(realloc)(void *ptr, size_t size)
false, false); false, false);
if (ret != NULL) if (ret != NULL)
arena_prof_promoted(ret, usize); arena_prof_promoted(ret, usize);
} else else
old_ctx = NULL;
} else {
ret = iralloc(ptr, size, 0, 0, false, false); ret = iralloc(ptr, size, 0, 0, false, false);
if (ret == NULL)
old_ctx = NULL;
}
} else } else
#endif #endif
{ {
@ -1666,7 +1672,6 @@ JEMALLOC_P(rallocm)(void **ptr, size_t *rsize, size_t size, size_t extra,
bool no_move = flags & ALLOCM_NO_MOVE; bool no_move = flags & ALLOCM_NO_MOVE;
#ifdef JEMALLOC_PROF #ifdef JEMALLOC_PROF
prof_thr_cnt_t *cnt; prof_thr_cnt_t *cnt;
prof_ctx_t *old_ctx;
#endif #endif
assert(ptr != NULL); assert(ptr != NULL);
@ -1687,8 +1692,8 @@ JEMALLOC_P(rallocm)(void **ptr, size_t *rsize, size_t size, size_t extra,
*/ */
size_t max_usize = (alignment == 0) ? s2u(size+extra) : size_t max_usize = (alignment == 0) ? s2u(size+extra) :
sa2u(size+extra, alignment, NULL); sa2u(size+extra, alignment, NULL);
prof_ctx_t *old_ctx = prof_ctx_get(p);
old_size = isalloc(p); old_size = isalloc(p);
old_ctx = prof_ctx_get(p);
PROF_ALLOC_PREP(1, max_usize, cnt); PROF_ALLOC_PREP(1, max_usize, cnt);
if (cnt == NULL) if (cnt == NULL)
goto OOM; goto OOM;