Skip to content

Instantly share code, notes, and snippets.

@aldanor
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aldanor/1f5b0a61dc905023b788 to your computer and use it in GitHub Desktop.
Save aldanor/1f5b0a61dc905023b788 to your computer and use it in GitHub Desktop.
hdf5 thread safety in rust
#[allow(unstable)]
extern crate libc;
#[allow(unstable)]
mod test {
use libc::c_int;
use std::sync::{StaticMutex, MUTEX_INIT};
static LOCK: StaticMutex = MUTEX_INIT;
#[link(name = "hdf5")]
extern {
static H5E_ERR_CLS_g: c_int;
fn H5open() -> c_int;
}
fn get_err_cls() -> c_int {
unsafe {
let _ = LOCK.lock().unwrap();
H5open();
}
H5E_ERR_CLS_g
}
#[test]
fn test1() { println!("test1(): H5E_ERR_CLS_g = {}", get_err_cls()); }
#[test]
fn test2() { println!("test1(): H5E_ERR_CLS_g = {}", get_err_cls()); }
#[test]
fn test3() { println!("test1(): H5E_ERR_CLS_g = {}", get_err_cls()); }
}
@aldanor
Copy link
Author

aldanor commented Jan 16, 2015

running 3 tests
test2(): H5E_ERR_CLS_g = -1
test3(): H5E_ERR_CLS_g = -1
test test::test2 ... ok
test test::test3 ... ok
test1(): H5E_ERR_CLS_g = 184549376
test test::test1 ... ok
running 3 tests
test2(): H5E_ERR_CLS_g = 184549376
test3(): H5E_ERR_CLS_g = 184549376
test test::test2 ... ok
test test::test3 ... ok
test1(): H5E_ERR_CLS_g = 184549376
test test::test1 ... ok
running 3 tests
test2(): H5E_ERR_CLS_g = -1
test3(): H5E_ERR_CLS_g = 184549376
test test::test2 ... ok
test test::test3 ... ok
test1(): H5E_ERR_CLS_g = 184549376
test test::test1 ... ok

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment