Fix fork()-related lock rank ordering reversals.

This commit is contained in:
Jason Evans
2016-04-25 23:14:40 -07:00
parent 0d970a054e
commit 174c0c3a9c
11 changed files with 188 additions and 44 deletions

View File

@@ -601,7 +601,10 @@ void arena_nthreads_inc(arena_t *arena, bool internal);
void arena_nthreads_dec(arena_t *arena, bool internal);
arena_t *arena_new(tsd_t *tsd, unsigned ind);
bool arena_boot(void);
void arena_prefork(tsd_t *tsd, arena_t *arena);
void arena_prefork0(tsd_t *tsd, arena_t *arena);
void arena_prefork1(tsd_t *tsd, arena_t *arena);
void arena_prefork2(tsd_t *tsd, arena_t *arena);
void arena_prefork3(tsd_t *tsd, arena_t *arena);
void arena_postfork_parent(tsd_t *tsd, arena_t *arena);
void arena_postfork_child(tsd_t *tsd, arena_t *arena);

View File

@@ -84,7 +84,10 @@ arena_nthreads_inc
arena_palloc
arena_postfork_child
arena_postfork_parent
arena_prefork
arena_prefork0
arena_prefork1
arena_prefork2
arena_prefork3
arena_prof_accum
arena_prof_accum_impl
arena_prof_accum_locked
@@ -432,7 +435,8 @@ prof_malloc_sample_object
prof_mdump
prof_postfork_child
prof_postfork_parent
prof_prefork
prof_prefork0
prof_prefork1
prof_realloc
prof_reset
prof_sample_accum_update
@@ -583,11 +587,14 @@ valgrind_make_mem_undefined
witness_assert_lockless
witness_assert_not_owner
witness_assert_owner
witness_fork_cleanup
witness_init
witness_lock
witness_lock_error
witness_lockless_error
witness_not_owner_error
witness_owner_error
witness_postfork
witness_prefork
witness_unlock
witnesses_cleanup

View File

@@ -316,7 +316,8 @@ bool prof_gdump_set(tsd_t *tsd, bool active);
void prof_boot0(void);
void prof_boot1(void);
bool prof_boot2(tsd_t *tsd);
void prof_prefork(tsd_t *tsd);
void prof_prefork0(tsd_t *tsd);
void prof_prefork1(tsd_t *tsd);
void prof_postfork_parent(tsd_t *tsd);
void prof_postfork_child(tsd_t *tsd);
void prof_sample_threshold_update(prof_tdata_t *tdata);

View File

@@ -544,6 +544,7 @@ struct tsd_init_head_s {
O(tcache_enabled, tcache_enabled_t) \
O(quarantine, quarantine_t *) \
O(witnesses, witness_list_t) \
O(witness_fork, bool) \
#define TSD_INITIALIZER { \
tsd_state_uninitialized, \
@@ -558,7 +559,8 @@ struct tsd_init_head_s {
false, \
tcache_enabled_default, \
NULL, \
ql_head_initializer(witnesses) \
ql_head_initializer(witnesses), \
false \
}
struct tsd_s {

View File

@@ -94,6 +94,9 @@ extern witness_lockless_error_t *witness_lockless_error;
void witness_assert_lockless(tsd_t *tsd);
void witnesses_cleanup(tsd_t *tsd);
void witness_fork_cleanup(tsd_t *tsd);
void witness_prefork(tsd_t *tsd);
void witness_postfork(tsd_t *tsd);
#endif /* JEMALLOC_H_EXTERNS */
/******************************************************************************/