This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH][malloc] Improve malloc initialization sequence
- From: Wilco Dijkstra <Wilco dot Dijkstra at arm dot com>
- To: "libc-alpha at sourceware dot org" <libc-alpha at sourceware dot org>, "dj at redhat dot com" <dj at redhat dot com>
- Cc: nd <nd at arm dot com>
- Date: Fri, 29 Sep 2017 16:48:02 +0000
- Subject: [PATCH][malloc] Improve malloc initialization sequence
- Authentication-results: sourceware.org; auth=none
- Authentication-results: spf=none (sender IP is ) smtp.mailfrom=Wilco dot Dijkstra at arm dot com;
- Nodisclaimer: True
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
The current malloc initialization is quite convoluted. Instead of
sometimes calling malloc_consolidate from ptmalloc_init, call
malloc_init_state so that the main_arena is always initialized.
The special initialization can now be removed from malloc_consolidate.
GLIBC builds and tests pass, OK for commit?
ChangeLog:
2017-09-29 Wilco Dijkstra <wdijkstr@arm.com>
* malloc/arena.c (ptmalloc_init): Call malloc_init_state.
* malloc/malloc.c (malloc_consolidate): Remove initialization.
--
diff --git a/malloc/arena.c b/malloc/arena.c
index 9e5a62d260bf2f5e6d76da4ccaf7b7dcb388c296..628652c2d89ea092f7656d2ec4f3c405a39de886 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -312,7 +312,7 @@ ptmalloc_init (void)
thread attempting to use the arena in parallel waits on us till we
finish. */
__libc_lock_lock (main_arena.mutex);
- malloc_consolidate (&main_arena);
+ malloc_init_state (&main_arena);
TUNABLE_GET (check, int32_t, TUNABLE_CALLBACK (set_mallopt_check));
TUNABLE_GET (top_pad, size_t, TUNABLE_CALLBACK (set_top_pad));
@@ -392,6 +392,7 @@ ptmalloc_init (void)
}
}
}
+ malloc_init_state (&main_arena);
if (s && s[0] != '\0' && s[0] != '0')
__malloc_check_init ();
#endif
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 88cfd25766eba6787faeb7195d95b73d7a4637ab..162e423e7bd18a07e4e97dc618be406d8bc9c529 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -4410,12 +4410,7 @@ static void malloc_consolidate(mstate av)
mchunkptr bck;
mchunkptr fwd;
- /*
- If max_fast is 0, we know that av hasn't
- yet been initialized, in which case do so below
- */
-
- if (get_max_fast () != 0) {
+ {
atomic_store_relaxed (&av->have_fastchunks, false);
unsorted_bin = unsorted_chunks(av);
@@ -4484,10 +4479,6 @@ static void malloc_consolidate(mstate av)
}
} while (fb++ != maxfb);
}
- else {
- malloc_init_state(av);
- check_malloc_state(av);
- }
}
/*