mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
* malloc/malloc.c (do_check_malloc_state): Only require for empty
bins for large sizes in main arena.
This commit is contained in:
@ -1,5 +1,8 @@
|
|||||||
2006-10-13 Ulrich Drepper <drepper@redhat.com>
|
2006-10-13 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* malloc/malloc.c (do_check_malloc_state): Only require for empty
|
||||||
|
bins for large sizes in main arena.
|
||||||
|
|
||||||
* libio/stdio.h: Add more __wur attributes.
|
* libio/stdio.h: Add more __wur attributes.
|
||||||
|
|
||||||
* elf/dl-minimal.c (realloc): Optimize last patch.
|
* elf/dl-minimal.c (realloc): Optimize last patch.
|
||||||
|
@ -2741,8 +2741,19 @@ static void do_check_malloc_state(mstate av)
|
|||||||
for (i = 0; i < NFASTBINS; ++i) {
|
for (i = 0; i < NFASTBINS; ++i) {
|
||||||
p = av->fastbins[i];
|
p = av->fastbins[i];
|
||||||
|
|
||||||
|
/* The following test can only be performed for the main arena.
|
||||||
|
While mallopt calls malloc_consolidate to get rid of all fast
|
||||||
|
bins (especially those larger than the new maximum) this does
|
||||||
|
only happen for the main arena. Trying to do this for any
|
||||||
|
other arena would mean those arenas have to be locked and
|
||||||
|
malloc_consolidate be called for them. This is excessive. And
|
||||||
|
even if this is acceptable to somebody it still cannot solve
|
||||||
|
the problem completely since if the arena is locked a
|
||||||
|
concurrent malloc call might create a new arena which then
|
||||||
|
could use the newly invalid fast bins. */
|
||||||
|
|
||||||
/* all bins past max_fast are empty */
|
/* all bins past max_fast are empty */
|
||||||
if (i > max_fast_bin)
|
if (av == &main_arena && i > max_fast_bin)
|
||||||
assert(p == 0);
|
assert(p == 0);
|
||||||
|
|
||||||
while (p != 0) {
|
while (p != 0) {
|
||||||
|
Reference in New Issue
Block a user