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 { impl Drop for TlDrop {
fn drop(&mut self) { 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); let mut sync_state = SYNC_STATE.swap(THREAD1_WAITING, Ordering::SeqCst);
loop { loop {
match sync_state { match sync_state {
@@ -276,7 +269,15 @@ fn join_orders_after_tls_destructors() {
static TL_DROP: TlDrop = TlDrop; 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(); .unwrap();