mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			1,005 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1,005 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
#![warn(rust_2018_idioms)]
 | 
						|
#![cfg(feature = "full")]
 | 
						|
#![cfg(unix)]
 | 
						|
 | 
						|
mod support {
 | 
						|
    pub mod signal;
 | 
						|
}
 | 
						|
use support::signal::send_signal;
 | 
						|
 | 
						|
use tokio::runtime::Runtime;
 | 
						|
use tokio::signal::unix::{signal, SignalKind};
 | 
						|
 | 
						|
#[test]
 | 
						|
fn dropping_loops_does_not_cause_starvation() {
 | 
						|
    let kind = SignalKind::user_defined1();
 | 
						|
 | 
						|
    let first_rt = rt();
 | 
						|
    let mut first_signal =
 | 
						|
        first_rt.block_on(async { signal(kind).expect("failed to register first signal") });
 | 
						|
 | 
						|
    let second_rt = rt();
 | 
						|
    let mut second_signal =
 | 
						|
        second_rt.block_on(async { signal(kind).expect("failed to register second signal") });
 | 
						|
 | 
						|
    send_signal(libc::SIGUSR1);
 | 
						|
 | 
						|
    first_rt
 | 
						|
        .block_on(first_signal.recv())
 | 
						|
        .expect("failed to await first signal");
 | 
						|
 | 
						|
    drop(first_rt);
 | 
						|
    drop(first_signal);
 | 
						|
 | 
						|
    send_signal(libc::SIGUSR1);
 | 
						|
 | 
						|
    second_rt.block_on(second_signal.recv());
 | 
						|
}
 | 
						|
 | 
						|
fn rt() -> Runtime {
 | 
						|
    tokio::runtime::Builder::new_current_thread()
 | 
						|
        .enable_all()
 | 
						|
        .build()
 | 
						|
        .unwrap()
 | 
						|
}
 |