rust_asio 0.6.0

Asynchronous I/O library
Documentation
#[cfg(unix)] mod pthread;
#[cfg(unix)] pub use self::pthread::PthreadTssPtr as TssPtr;

#[cfg(windows)] mod win;
#[cfg(windows)] pub use self::win::WinTssPtr as TssPtr;

#[test]
fn test_tss_ptr_1() {
    use std::ptr;

    let ptr = TssPtr::new().unwrap();
    assert_eq!(ptr.get(), ptr::null_mut());

    let mut n = 0;
    ptr.set(&mut n);
    assert_eq!(ptr.get(), &mut n as *mut i32);
}

#[test]
fn test_tss_ptr_2() {
    use std::ptr;
    use std::thread;

    lazy_static! {
        static ref PTR: TssPtr<i32> = TssPtr::new().unwrap();
    };
    assert_eq!(PTR.get(), ptr::null_mut());

    let mut n = 0;
    PTR.set(&mut n);
    assert_eq!(PTR.get(), &mut n as *mut i32);

    thread::spawn(|| {
        assert_eq!(PTR.get(), ptr::null_mut());

        let mut n = 0;
        PTR.set(&mut n);
        assert_eq!(PTR.get(), &mut n as *mut i32);
    }).join().unwrap();

    thread::spawn(|| {
        assert_eq!(PTR.get(), ptr::null_mut());

        let mut n = 0;
        PTR.set(&mut n);
        assert_eq!(PTR.get(), &mut n as *mut i32);
    }).join().unwrap();
}