Fix realloc(p, 0) to act like free(p).
Reported by Yoni Londer.
This commit is contained in:
parent
b172610317
commit
f081b88dfb
@ -1124,23 +1124,28 @@ JEMALLOC_P(realloc)(void *ptr, size_t size)
|
|||||||
;
|
;
|
||||||
|
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
if (config_sysv == false || opt_sysv == false)
|
if (ptr != NULL) {
|
||||||
size = 1;
|
/* realloc(ptr, 0) is equivalent to free(p). */
|
||||||
else {
|
if (config_prof || config_stats)
|
||||||
if (ptr != NULL) {
|
old_size = isalloc(ptr);
|
||||||
if (config_prof || config_stats)
|
if (config_prof && opt_prof) {
|
||||||
old_size = isalloc(ptr);
|
old_ctx = prof_ctx_get(ptr);
|
||||||
if (config_prof && opt_prof) {
|
|
||||||
old_ctx = prof_ctx_get(ptr);
|
|
||||||
cnt = NULL;
|
|
||||||
}
|
|
||||||
idalloc(ptr);
|
|
||||||
} else if (config_prof && opt_prof) {
|
|
||||||
old_ctx = NULL;
|
|
||||||
cnt = NULL;
|
cnt = NULL;
|
||||||
}
|
}
|
||||||
|
idalloc(ptr);
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
goto RETURN;
|
goto RETURN;
|
||||||
|
} else {
|
||||||
|
if (config_sysv == false || opt_sysv == false)
|
||||||
|
size = 1;
|
||||||
|
else {
|
||||||
|
if (config_prof && opt_prof) {
|
||||||
|
old_ctx = NULL;
|
||||||
|
cnt = NULL;
|
||||||
|
}
|
||||||
|
ret = NULL;
|
||||||
|
goto RETURN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1188,6 +1193,7 @@ OOM:
|
|||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
/* realloc(NULL, size) is equivalent to malloc(size). */
|
||||||
if (config_prof && opt_prof)
|
if (config_prof && opt_prof)
|
||||||
old_ctx = NULL;
|
old_ctx = NULL;
|
||||||
if (malloc_init()) {
|
if (malloc_init()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user