Question about the spare chunk

cee1 fykcee1 at gmail.com
Wed Dec 3 06:17:30 PST 2014


Hi, all

I'm learning the code of jemalloc 3.6.0, I find in arena_run_dalloc()
"""
if (size == arena_maxclass)
    arena_chunk_dealloc(arena, chunk);
"""

And in arena_chunk_dealloc():
"""
if (arena->spare != NULL) {
    arena_chunk_t *spare = arena->spare;

    arena->spare = chunk;
    malloc_mutex_unlock(&arena->lock);

    chunk_dealloc((void *)spare, chunksize, true);

    malloc_mutex_lock(&arena->lock);
"""

Here the old spare chunk is replaced by the new one and dealloced.

The deallocating process is done without the lock protection. In this
lockless period, is it possible another arena_chunk_dealloc running in
another thread replaces and deallocates ** our new spare chunk ** ?
Which is still in the chunks_dirty tree and will be accessed by the
purge process later.



-- 
Regards,

- cee1


More information about the jemalloc-discuss mailing list