()
| 843 | |
| 844 | #[test] |
| 845 | fn atomic_wait_massive_timeout() -> Result<()> { |
| 846 | let mut config = Config::new(); |
| 847 | config.shared_memory(true); |
| 848 | let engine = Engine::new(&config)?; |
| 849 | |
| 850 | let memory = SharedMemory::new(&engine, MemoryType::shared(1, 1))?; |
| 851 | let result = memory.atomic_wait32(0, 1, Some(Duration::MAX)); |
| 852 | assert_eq!(result, Ok(WaitResult::Mismatch)); |
| 853 | let result = memory.atomic_wait64(0, 1, Some(Duration::MAX)); |
| 854 | assert_eq!(result, Ok(WaitResult::Mismatch)); |
| 855 | |
| 856 | let done = Arc::new(AtomicBool::new(false)); |
| 857 | let t = thread::spawn({ |
| 858 | let memory = memory.clone(); |
| 859 | let done = done.clone(); |
| 860 | move || { |
| 861 | while !done.load(SeqCst) { |
| 862 | memory.atomic_notify(0, 1).unwrap(); |
| 863 | memory.atomic_notify(8, 1).unwrap(); |
| 864 | } |
| 865 | } |
| 866 | }); |
| 867 | |
| 868 | let result = memory.atomic_wait32(0, 0, Some(Duration::MAX)); |
| 869 | assert_eq!(result, Ok(WaitResult::Ok)); |
| 870 | let result = memory.atomic_wait64(8, 0, Some(Duration::MAX)); |
| 871 | assert_eq!(result, Ok(WaitResult::Ok)); |
| 872 | |
| 873 | done.store(true, SeqCst); |
| 874 | |
| 875 | t.join().unwrap(); |
| 876 | |
| 877 | Ok(()) |
| 878 | } |
nothing calls this directly
no test coverage detected