mirror of
https://sourceware.org/git/glibc.git
synced 2025-04-19 01:04:13 +03:00
malloc: move tcache_init out of hot tcache paths
This patch moves any calls of tcache_init away after tcache hot paths. Since there is no reason to initialize tcaches in the hot path and since we need to be able to check tcache != NULL in any case, because of tcache_thread_shutdown function, moving tcache_init away from hot path can only be beneficial. The patch also removes the initialization of tcaches within the __libc_free call. It only makes sense to initialize tcaches for the thread after it calls one of the allocation functions. Also the patch removes the save/restore of errno from tcache_init code, as it is no longer needed.
This commit is contained in:
parent
ceeffd970c
commit
1c9ac027a5
@ -3296,9 +3296,6 @@ tcache_init(void)
|
||||
if (MAX_TCACHE_SIZE >= GLRO (dl_pagesize) / 2)
|
||||
malloc_printerr ("max tcache size too large");
|
||||
|
||||
/* Preserve errno when called from free() - _int_malloc may corrupt it. */
|
||||
int err = errno;
|
||||
|
||||
arena_get (ar_ptr, bytes);
|
||||
victim = _int_malloc (ar_ptr, bytes);
|
||||
if (!victim && ar_ptr != NULL)
|
||||
@ -3311,8 +3308,6 @@ tcache_init(void)
|
||||
if (ar_ptr != NULL)
|
||||
__libc_lock_unlock (ar_ptr->mutex);
|
||||
|
||||
__set_errno (err);
|
||||
|
||||
/* In a low memory situation, we may not be able to allocate memory
|
||||
- in which case, we just keep trying later. However, we
|
||||
typically do this very early, so either there is sufficient
|
||||
@ -3346,13 +3341,15 @@ tcache_try_malloc (size_t bytes, void **memptr)
|
||||
|
||||
size_t tc_idx = csize2tidx (tbytes);
|
||||
|
||||
MAYBE_INIT_TCACHE ();
|
||||
|
||||
if (tcache_available (tc_idx))
|
||||
*memptr = tcache_get (tc_idx);
|
||||
{
|
||||
*memptr = tcache_get (tc_idx);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
*memptr = NULL;
|
||||
|
||||
MAYBE_INIT_TCACHE ();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -3684,8 +3681,6 @@ _mid_memalign (size_t alignment, size_t bytes, void *address)
|
||||
}
|
||||
size_t tc_idx = csize2tidx (tbytes);
|
||||
|
||||
MAYBE_INIT_TCACHE ();
|
||||
|
||||
if (tcache_available (tc_idx))
|
||||
{
|
||||
/* The tcache itself isn't encoded, but the chain is. */
|
||||
@ -3702,6 +3697,7 @@ _mid_memalign (size_t alignment, size_t bytes, void *address)
|
||||
return tag_new_usable (victim);
|
||||
}
|
||||
}
|
||||
MAYBE_INIT_TCACHE ();
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -4556,8 +4552,6 @@ _int_free_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T size, int have_lock)
|
||||
{
|
||||
mfastbinptr *fb; /* associated fastbin */
|
||||
|
||||
MAYBE_INIT_TCACHE ();
|
||||
|
||||
/*
|
||||
If eligible, place chunk on a fastbin so it can be found
|
||||
and used quickly in malloc.
|
||||
|
Loading…
x
Reference in New Issue
Block a user