join_orders_after_tls_destructors: ensure thread 2 is launched before thread 1 enters TLS destructors

This commit is contained in:
Mohsen Zohrevandi
2021-05-06 09:36:26 -07:00
parent 8a0a4b1493
commit 2acd62d7c3

View File

@@ -250,13 +250,6 @@ fn join_orders_after_tls_destructors() {
impl Drop for TlDrop {
fn drop(&mut self) {
loop {
match SYNC_STATE.load(Ordering::SeqCst) {
FRESH => thread::yield_now(),
THREAD2_LAUNCHED => break,
v => unreachable!("sync state: {}", v),
}
}
let mut sync_state = SYNC_STATE.swap(THREAD1_WAITING, Ordering::SeqCst);
loop {
match sync_state {
@@ -276,7 +269,15 @@ fn join_orders_after_tls_destructors() {
static TL_DROP: TlDrop = TlDrop;
}
TL_DROP.with(|_| {})
TL_DROP.with(|_| {});
loop {
match SYNC_STATE.load(Ordering::SeqCst) {
FRESH => thread::yield_now(),
THREAD2_LAUNCHED => break,
v => unreachable!("sync state: {}", v),
}
}
})
.unwrap();