join_orders_after_tls_destructors: ensure thread 2 is launched before thread 1 enters TLS destructors
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user