Make Stack Sync + Send
This commit is contained in:
parent
9f5d750744
commit
3ab1cc7a8f
|
|
@ -40,15 +40,8 @@ pub trait Stackable: ForeignType {
|
|||
/// An owned stack of `T`.
|
||||
pub struct Stack<T: Stackable>(*mut T::StackType);
|
||||
|
||||
impl<T: Stackable> Stack<T> {
|
||||
pub fn new() -> Result<Stack<T>, ErrorStack> {
|
||||
unsafe {
|
||||
ffi::init();
|
||||
let ptr = cvt_p(OPENSSL_sk_new_null())?;
|
||||
Ok(Stack(ptr as *mut _))
|
||||
}
|
||||
}
|
||||
}
|
||||
unsafe impl<T: Stackable + Send> Send for Stack<T> {}
|
||||
unsafe impl<T: Stackable + Sync> Sync for Stack<T> {}
|
||||
|
||||
impl<T: Stackable> Drop for Stack<T> {
|
||||
fn drop(&mut self) {
|
||||
|
|
@ -59,6 +52,16 @@ impl<T: Stackable> Drop for Stack<T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: Stackable> Stack<T> {
|
||||
pub fn new() -> Result<Stack<T>, ErrorStack> {
|
||||
unsafe {
|
||||
ffi::init();
|
||||
let ptr = cvt_p(OPENSSL_sk_new_null())?;
|
||||
Ok(Stack(ptr as *mut _))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Stackable> iter::IntoIterator for Stack<T> {
|
||||
type IntoIter = IntoIter<T>;
|
||||
type Item = T;
|
||||
|
|
@ -164,6 +167,9 @@ impl<T: Stackable> ExactSizeIterator for IntoIter<T> {}
|
|||
|
||||
pub struct StackRef<T: Stackable>(Opaque, PhantomData<T>);
|
||||
|
||||
unsafe impl<T: Stackable + Send> Send for StackRef<T> {}
|
||||
unsafe impl<T: Stackable + Sync> Sync for StackRef<T> {}
|
||||
|
||||
impl<T: Stackable> ForeignTypeRef for StackRef<T> {
|
||||
type CType = T::StackType;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue