diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-10-13 20:30:12 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-10-13 20:30:12 +0000 |
commit | dbc3d56b704c7858de411b59688efe7860dfe580 (patch) | |
tree | 56179f7edcb449b1a88bd1d5015404a2adabd448 | |
parent | 75aaf98ff8bad6359d19727c308af0f81486d924 (diff) | |
download | glibc-dbc3d56b704c7858de411b59688efe7860dfe580.zip glibc-dbc3d56b704c7858de411b59688efe7860dfe580.tar.gz glibc-dbc3d56b704c7858de411b59688efe7860dfe580.tar.bz2 |
* malloc/malloc.c (do_check_malloc_state): Only require for empty
bins for large sizes in main arena.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | malloc/malloc.c | 13 |
2 files changed, 15 insertions, 1 deletions
@@ -1,5 +1,8 @@ 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. * elf/dl-minimal.c (realloc): Optimize last patch. diff --git a/malloc/malloc.c b/malloc/malloc.c index c385529..e4b693c 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -2741,8 +2741,19 @@ static void do_check_malloc_state(mstate av) for (i = 0; i < NFASTBINS; ++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 */ - if (i > max_fast_bin) + if (av == &main_arena && i > max_fast_bin) assert(p == 0); while (p != 0) { |