Add basic reentrancy-checking support, and allow arena_new to reenter.

This checks whether or not we're reentrant using thread-local data, and, if we
are, moves certain internal allocations to use arena 0 (which should be properly
initialized after bootstrapping).

The immediate thing this allows is spinning up threads in arena_new, which will
enable spinning up background threads there.
This commit is contained in:
David Goldblatt
2017-03-31 19:59:45 -07:00
committed by David Goldblatt
parent 0a0fcd3e6a
commit b407a65401
10 changed files with 170 additions and 47 deletions

View File

@@ -351,7 +351,7 @@ TEST_END
int
main(void) {
return test(
return test_no_reentrancy(
test_stats_summary,
test_stats_large,
test_stats_arenas_summary,

View File

@@ -79,7 +79,6 @@ thd_start(void *arg) {
}
TEST_BEGIN(test_tsd_main_thread) {
test_skip_if(test_is_reentrant());
thd_start((void *)(uintptr_t)0xa5f3e329);
}
TEST_END
@@ -144,7 +143,7 @@ main(void) {
data_tsd_boot();
data_test_started = true;
return test(
return test_no_reentrancy(
test_tsd_main_thread,
test_tsd_sub_thread,
test_tsd_reincarnation);