Minor cleanup in various places

This commit is contained in:
Sebastian Dröge 2020-03-09 12:55:14 +02:00
parent 9d5ae8ed14
commit 8d0fa62275
5 changed files with 44 additions and 95 deletions

View file

@ -730,7 +730,7 @@ impl Harness {
None None
} else { } else {
Some(Ref( Some(Ref(
Some(Harness( mem::ManuallyDrop::new(Harness(
ptr::NonNull::new_unchecked(sink_harness), ptr::NonNull::new_unchecked(sink_harness),
PhantomData, PhantomData,
)), )),
@ -747,7 +747,7 @@ impl Harness {
None None
} else { } else {
Some(Ref( Some(Ref(
Some(Harness( mem::ManuallyDrop::new(Harness(
ptr::NonNull::new_unchecked(src_harness), ptr::NonNull::new_unchecked(src_harness),
PhantomData, PhantomData,
)), )),
@ -764,7 +764,7 @@ impl Harness {
None None
} else { } else {
Some(RefMut( Some(RefMut(
Some(Harness( mem::ManuallyDrop::new(Harness(
ptr::NonNull::new_unchecked(sink_harness), ptr::NonNull::new_unchecked(sink_harness),
PhantomData, PhantomData,
)), )),
@ -781,7 +781,7 @@ impl Harness {
None None
} else { } else {
Some(RefMut( Some(RefMut(
Some(Harness( mem::ManuallyDrop::new(Harness(
ptr::NonNull::new_unchecked(src_harness), ptr::NonNull::new_unchecked(src_harness),
PhantomData, PhantomData,
)), )),
@ -793,44 +793,30 @@ impl Harness {
} }
#[derive(Debug)] #[derive(Debug)]
pub struct Ref<'a>(Option<Harness>, PhantomData<&'a Harness>); pub struct Ref<'a>(mem::ManuallyDrop<Harness>, PhantomData<&'a Harness>);
impl<'a> ops::Deref for Ref<'a> { impl<'a> ops::Deref for Ref<'a> {
type Target = Harness; type Target = Harness;
fn deref(&self) -> &Harness { fn deref(&self) -> &Harness {
self.0.as_ref().unwrap() &*self.0
}
}
impl<'a> Drop for Ref<'a> {
fn drop(&mut self) {
// We only really borrow
mem::forget(self.0.take())
} }
} }
#[derive(Debug)] #[derive(Debug)]
pub struct RefMut<'a>(Option<Harness>, PhantomData<&'a mut Harness>); pub struct RefMut<'a>(mem::ManuallyDrop<Harness>, PhantomData<&'a mut Harness>);
impl<'a> ops::Deref for RefMut<'a> { impl<'a> ops::Deref for RefMut<'a> {
type Target = Harness; type Target = Harness;
fn deref(&self) -> &Harness { fn deref(&self) -> &Harness {
self.0.as_ref().unwrap() &*self.0
} }
} }
impl<'a> ops::DerefMut for RefMut<'a> { impl<'a> ops::DerefMut for RefMut<'a> {
fn deref_mut(&mut self) -> &mut Harness { fn deref_mut(&mut self) -> &mut Harness {
self.0.as_mut().unwrap() &mut *self.0
}
}
impl<'a> Drop for RefMut<'a> {
fn drop(&mut self) {
// We only really borrow
mem::forget(self.0.take())
} }
} }

View file

@ -1435,11 +1435,8 @@ impl<'a> NavigationBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
let structure = s.structure.take(); let structure = s.structure.take().unwrap();
let ev = gst_sys::gst_event_new_navigation(structure.to_glib_none().0); gst_sys::gst_event_new_navigation(structure.into_ptr())
mem::forget(structure);
ev
}); });
} }
@ -1553,14 +1550,8 @@ impl<'a> CustomUpstreamBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
let structure = s.structure.take(); let structure = s.structure.take().unwrap();
let ev = gst_sys::gst_event_new_custom( gst_sys::gst_event_new_custom(gst_sys::GST_EVENT_CUSTOM_UPSTREAM, structure.into_ptr())
gst_sys::GST_EVENT_CUSTOM_UPSTREAM,
structure.to_glib_none().0,
);
mem::forget(structure);
ev
}); });
} }
@ -1578,14 +1569,8 @@ impl<'a> CustomDownstreamBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
let structure = s.structure.take(); let structure = s.structure.take().unwrap();
let ev = gst_sys::gst_event_new_custom( gst_sys::gst_event_new_custom(gst_sys::GST_EVENT_CUSTOM_DOWNSTREAM, structure.into_ptr())
gst_sys::GST_EVENT_CUSTOM_DOWNSTREAM,
structure.to_glib_none().0,
);
mem::forget(structure);
ev
}); });
} }
@ -1603,14 +1588,11 @@ impl<'a> CustomDownstreamOobBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
let structure = s.structure.take(); let structure = s.structure.take().unwrap();
let ev = gst_sys::gst_event_new_custom( gst_sys::gst_event_new_custom(
gst_sys::GST_EVENT_CUSTOM_DOWNSTREAM_OOB, gst_sys::GST_EVENT_CUSTOM_DOWNSTREAM_OOB,
structure.to_glib_none().0, structure.into_ptr(),
); )
mem::forget(structure);
ev
}); });
} }
@ -1628,14 +1610,11 @@ impl<'a> CustomDownstreamStickyBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
let structure = s.structure.take(); let structure = s.structure.take().unwrap();
let ev = gst_sys::gst_event_new_custom( gst_sys::gst_event_new_custom(
gst_sys::GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, gst_sys::GST_EVENT_CUSTOM_DOWNSTREAM_STICKY,
structure.to_glib_none().0, structure.into_ptr(),
); )
mem::forget(structure);
ev
}); });
} }
@ -1653,14 +1632,8 @@ impl<'a> CustomBothBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
let structure = s.structure.take(); let structure = s.structure.take().unwrap();
let ev = gst_sys::gst_event_new_custom( gst_sys::gst_event_new_custom(gst_sys::GST_EVENT_CUSTOM_BOTH, structure.into_ptr())
gst_sys::GST_EVENT_CUSTOM_BOTH,
structure.to_glib_none().0,
);
mem::forget(structure);
ev
}); });
} }
@ -1678,14 +1651,8 @@ impl<'a> CustomBothOobBuilder<'a> {
} }
event_builder_generic_impl!(|s: &mut Self| { event_builder_generic_impl!(|s: &mut Self| {
let structure = s.structure.take(); let structure = s.structure.take().unwrap();
let ev = gst_sys::gst_event_new_custom( gst_sys::gst_event_new_custom(gst_sys::GST_EVENT_CUSTOM_BOTH_OOB, structure.into_ptr())
gst_sys::GST_EVENT_CUSTOM_BOTH_OOB,
structure.to_glib_none().0,
);
mem::forget(structure);
ev
}); });
} }

View file

@ -43,6 +43,12 @@ impl<T> Iterator<T>
where where
for<'a> T: FromValueOptional<'a> + 'static, for<'a> T: FromValueOptional<'a> + 'static,
{ {
pub unsafe fn into_ptr(self) -> *mut gst_sys::GstIterator {
let it = self.to_glib_none().0;
mem::forget(self);
it as *mut _
}
#[allow(clippy::should_implement_trait)] #[allow(clippy::should_implement_trait)]
pub fn next(&mut self) -> Result<Option<T>, IteratorError> { pub fn next(&mut self) -> Result<Option<T>, IteratorError> {
unsafe { unsafe {
@ -72,9 +78,6 @@ where
F: Fn(T) -> bool + Send + Sync + 'static, F: Fn(T) -> bool + Send + Sync + 'static,
{ {
unsafe { unsafe {
let it = self.to_glib_none().0;
mem::forget(self);
let func_box: Box<dyn Fn(T) -> bool + Send + Sync + 'static> = Box::new(func); let func_box: Box<dyn Fn(T) -> bool + Send + Sync + 'static> = Box::new(func);
let mut closure_value = glib::Value::from_type(from_glib(filter_boxed_get_type::<T>())); let mut closure_value = glib::Value::from_type(from_glib(filter_boxed_get_type::<T>()));
gobject_sys::g_value_take_boxed( gobject_sys::g_value_take_boxed(
@ -83,7 +86,7 @@ where
); );
from_glib_full(gst_sys::gst_iterator_filter( from_glib_full(gst_sys::gst_iterator_filter(
it as *mut _, self.into_ptr(),
Some(filter_trampoline::<T>), Some(filter_trampoline::<T>),
closure_value.to_glib_none().0, closure_value.to_glib_none().0,
)) ))
@ -189,7 +192,7 @@ where
{ {
let it = it as *mut RsIterator<T, I>; let it = it as *mut RsIterator<T, I>;
(*it).imp = Some(imp); ptr::write(&mut (*it).imp, imp);
} }
from_glib_full(it) from_glib_full(it)
@ -212,7 +215,7 @@ where
for<'a> T: FromValueOptional<'a> + StaticType + ToValue + Send + 'static, for<'a> T: FromValueOptional<'a> + StaticType + ToValue + Send + 'static,
{ {
iter: gst_sys::GstIterator, iter: gst_sys::GstIterator,
imp: Option<I>, imp: I,
phantom: PhantomData<T>, phantom: PhantomData<T>,
} }
@ -241,7 +244,7 @@ where
for<'a> T: FromValueOptional<'a> + StaticType + ToValue + Send + 'static, for<'a> T: FromValueOptional<'a> + StaticType + ToValue + Send + 'static,
{ {
let it = it as *mut RsIterator<T, I>; let it = it as *mut RsIterator<T, I>;
let _ = (*it).imp.take(); ptr::drop_in_place(&mut (*it).imp);
} }
unsafe extern "C" fn rs_iterator_next<T, I: IteratorImpl<T>>( unsafe extern "C" fn rs_iterator_next<T, I: IteratorImpl<T>>(
@ -252,11 +255,10 @@ where
for<'a> T: FromValueOptional<'a> + StaticType + ToValue + Send + 'static, for<'a> T: FromValueOptional<'a> + StaticType + ToValue + Send + 'static,
{ {
let it = it as *mut RsIterator<T, I>; let it = it as *mut RsIterator<T, I>;
match (*it).imp.as_mut().map(|imp| imp.next()).unwrap() { match (*it).imp.next() {
Some(Ok(value)) => { Some(Ok(value)) => {
let value = value.to_value(); let value = value.to_value();
ptr::write(result, ptr::read(value.to_glib_none().0)); ptr::write(result, value.into_raw());
mem::forget(value);
gst_sys::GST_ITERATOR_OK gst_sys::GST_ITERATOR_OK
} }
None => gst_sys::GST_ITERATOR_DONE, None => gst_sys::GST_ITERATOR_DONE,
@ -272,7 +274,7 @@ where
for<'a> T: FromValueOptional<'a> + StaticType + ToValue + Send + 'static, for<'a> T: FromValueOptional<'a> + StaticType + ToValue + Send + 'static,
{ {
let it = it as *mut RsIterator<T, I>; let it = it as *mut RsIterator<T, I>;
(*it).imp.as_mut().map(|imp| imp.resync()).unwrap(); (*it).imp.resync();
} }
#[derive(Clone)] #[derive(Clone)]

View file

@ -1316,10 +1316,8 @@ where
&Pad::from_glib_borrow(pad).unsafe_cast(), &Pad::from_glib_borrow(pad).unsafe_cast(),
Option::<::Object>::from_glib_borrow(parent).as_ref(), Option::<::Object>::from_glib_borrow(parent).as_ref(),
); );
let ptr = ret.to_glib_none().0;
mem::forget(ret);
ptr as *mut _ ret.into_ptr()
} }
unsafe extern "C" fn trampoline_link_function< unsafe extern "C" fn trampoline_link_function<

View file

@ -420,14 +420,10 @@ impl StructureRef {
self.set_value(name, value); self.set_value(name, value);
} }
pub fn set_value(&mut self, name: &str, mut value: SendValue) { pub fn set_value(&mut self, name: &str, value: SendValue) {
unsafe { unsafe {
gst_sys::gst_structure_take_value( let mut value = value.into_raw();
&mut self.0, gst_sys::gst_structure_take_value(&mut self.0, name.to_glib_none().0, &mut value);
name.to_glib_none().0,
value.to_glib_none_mut().0,
);
mem::forget(value);
} }
} }