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

View file

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

View file

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

View file

@ -1316,10 +1316,8 @@ where
&Pad::from_glib_borrow(pad).unsafe_cast(),
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<

View file

@ -420,14 +420,10 @@ impl StructureRef {
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 {
gst_sys::gst_structure_take_value(
&mut self.0,
name.to_glib_none().0,
value.to_glib_none_mut().0,
);
mem::forget(value);
let mut value = value.into_raw();
gst_sys::gst_structure_take_value(&mut self.0, name.to_glib_none().0, &mut value);
}
}