about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMohsen Zohrevandi <mohsen.zohrevandi@fortanix.com>2021-05-06 09:36:26 -0700
committerMohsen Zohrevandi <mohsen.zohrevandi@fortanix.com>2021-05-06 09:36:26 -0700
commit2acd62d7c389bcdcf212673ed14120d2fd841df6 (patch)
tree260f2783e1f43eefb9073884dc0f4bbf32295c02
parent8a0a4b1493264901e5e41c4285fc3cc9f8419c28 (diff)
downloadrust-2acd62d7c389bcdcf212673ed14120d2fd841df6.tar.gz
rust-2acd62d7c389bcdcf212673ed14120d2fd841df6.zip
join_orders_after_tls_destructors: ensure thread 2 is launched before thread 1 enters TLS destructors
-rw-r--r--library/std/src/thread/local/tests.rs17
1 files changed, 9 insertions, 8 deletions
diff --git a/library/std/src/thread/local/tests.rs b/library/std/src/thread/local/tests.rs
index 494ad4e5fda..f33d6129619 100644
--- a/library/std/src/thread/local/tests.rs
+++ b/library/std/src/thread/local/tests.rs
@@ -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();