Merge pull request #925 from sfackler/stack-sync-send
Make Stack Sync + Send
This commit is contained in:
commit
83f6a24026
|
|
@ -40,15 +40,8 @@ pub trait Stackable: ForeignType {
|
||||||
/// An owned stack of `T`.
|
/// An owned stack of `T`.
|
||||||
pub struct Stack<T: Stackable>(*mut T::StackType);
|
pub struct Stack<T: Stackable>(*mut T::StackType);
|
||||||
|
|
||||||
impl<T: Stackable> Stack<T> {
|
unsafe impl<T: Stackable + Send> Send for Stack<T> {}
|
||||||
pub fn new() -> Result<Stack<T>, ErrorStack> {
|
unsafe impl<T: Stackable + Sync> Sync for Stack<T> {}
|
||||||
unsafe {
|
|
||||||
ffi::init();
|
|
||||||
let ptr = cvt_p(OPENSSL_sk_new_null())?;
|
|
||||||
Ok(Stack(ptr as *mut _))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Stackable> Drop for Stack<T> {
|
impl<T: Stackable> Drop for Stack<T> {
|
||||||
fn drop(&mut self) {
|
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> {
|
impl<T: Stackable> iter::IntoIterator for Stack<T> {
|
||||||
type IntoIter = IntoIter<T>;
|
type IntoIter = IntoIter<T>;
|
||||||
type Item = T;
|
type Item = T;
|
||||||
|
|
@ -164,6 +167,9 @@ impl<T: Stackable> ExactSizeIterator for IntoIter<T> {}
|
||||||
|
|
||||||
pub struct StackRef<T: Stackable>(Opaque, PhantomData<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> {
|
impl<T: Stackable> ForeignTypeRef for StackRef<T> {
|
||||||
type CType = T::StackType;
|
type CType = T::StackType;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue