#![allow(dead_code)] // not used on all platforms | |
use crate::mem; | |
pub type Key = libc::pthread_key_t; | |
#[inline] | |
pub unsafe fn create(dtor: Option<unsafe extern "C" fn(*mut u8)>) -> Key { | |
let mut key = 0; | |
assert_eq!(libc::pthread_key_create(&mut key, mem::transmute(dtor)), 0); | |
key | |
} | |
#[inline] | |
pub unsafe fn set(key: Key, value: *mut u8) { | |
let r = libc::pthread_setspecific(key, value as *mut _); | |
debug_assert_eq!(r, 0); | |
} | |
#[inline] | |
pub unsafe fn get(key: Key) -> *mut u8 { | |
libc::pthread_getspecific(key) as *mut u8 | |
} | |
#[inline] | |
pub unsafe fn destroy(key: Key) { | |
let r = libc::pthread_key_delete(key); | |
debug_assert_eq!(r, 0); | |
} |