use libc;
use self::os::{PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER,
pthread_mutex_t, pthread_cond_t};
- use core::ty::Unsafe;
- use core::kinds::marker;
+ use core::cell::UnsafeCell;
type pthread_mutexattr_t = libc::c_void;
type pthread_condattr_t = libc::c_void;
#[cfg(target_os = "freebsd")]
+ #[cfg(target_os = "dragonfly")]
mod os {
use libc;
- pub type pthread_mutex_t = *libc::c_void;
- pub type pthread_cond_t = *libc::c_void;
+ pub type pthread_mutex_t = *mut libc::c_void;
+ pub type pthread_cond_t = *mut libc::c_void;
pub static PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t =
0 as pthread_mutex_t;
static __SIZEOF_PTHREAD_MUTEX_T: uint = 24 - 8;
#[cfg(target_arch = "mips")]
static __SIZEOF_PTHREAD_MUTEX_T: uint = 24 - 8;
+ #[cfg(target_arch = "mipsel")]
+ static __SIZEOF_PTHREAD_MUTEX_T: uint = 24 - 8;
#[cfg(target_arch = "x86_64")]
static __SIZEOF_PTHREAD_COND_T: uint = 48 - 8;
#[cfg(target_arch = "x86")]
static __SIZEOF_PTHREAD_COND_T: uint = 48 - 8;
#[cfg(target_arch = "mips")]
static __SIZEOF_PTHREAD_COND_T: uint = 48 - 8;
+ #[cfg(target_arch = "mipsel")]
+ static __SIZEOF_PTHREAD_COND_T: uint = 48 - 8;
#[repr(C)]
pub struct pthread_mutex_t {
}
pub struct Mutex {
- lock: Unsafe<pthread_mutex_t>,
- cond: Unsafe<pthread_cond_t>,
+ lock: UnsafeCell<pthread_mutex_t>,
+ cond: UnsafeCell<pthread_cond_t>,
}
pub static MUTEX_INIT: Mutex = Mutex {
- lock: Unsafe {
- value: PTHREAD_MUTEX_INITIALIZER,
- marker1: marker::InvariantType,
- },
- cond: Unsafe {
- value: PTHREAD_COND_INITIALIZER,
- marker1: marker::InvariantType,
- },
+ lock: UnsafeCell { value: PTHREAD_MUTEX_INITIALIZER },
+ cond: UnsafeCell { value: PTHREAD_COND_INITIALIZER },
};
impl Mutex {
// is better to avoid initialization of potentially
// opaque OS data before it landed
let m = Mutex {
- lock: Unsafe::new(PTHREAD_MUTEX_INITIALIZER),
- cond: Unsafe::new(PTHREAD_COND_INITIALIZER),
+ lock: UnsafeCell::new(PTHREAD_MUTEX_INITIALIZER),
+ cond: UnsafeCell::new(PTHREAD_COND_INITIALIZER),
};
return m;