gstreamer/pad: Borrow the pad when taking the stream lock

Instead of taking a new reference to the pad.
This commit is contained in:
Sebastian Dröge 2020-06-22 11:48:56 +03:00
parent 79c457c8c4
commit a80471747c

View file

@ -38,8 +38,7 @@ use std::ptr;
use glib; use glib;
use glib::object::{Cast, IsA}; use glib::object::{Cast, IsA};
use glib::translate::{ use glib::translate::{
from_glib, from_glib_borrow, from_glib_full, from_glib_none, FromGlib, FromGlibPtrBorrow, from_glib, from_glib_borrow, from_glib_full, FromGlib, FromGlibPtrBorrow, ToGlib, ToGlibPtr,
ToGlib, ToGlibPtr,
}; };
use glib::StaticType; use glib::StaticType;
use glib_sys; use glib_sys;
@ -93,8 +92,8 @@ unsafe impl<'a> Sync for PadProbeData<'a> {}
#[derive(Debug)] #[derive(Debug)]
#[must_use = "if unused the StreamLock will immediately unlock"] #[must_use = "if unused the StreamLock will immediately unlock"]
pub struct StreamLock(Pad); pub struct StreamLock<'a>(&'a Pad);
impl Drop for StreamLock { impl<'a> Drop for StreamLock<'a> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
let pad: *mut gst_sys::GstPad = self.0.to_glib_none().0; let pad: *mut gst_sys::GstPad = self.0.to_glib_none().0;
@ -570,7 +569,7 @@ impl<O: IsA<Pad>> PadExtManual for O {
unsafe { unsafe {
let ptr: &mut gst_sys::GstPad = &mut *(self.as_ptr() as *mut _); let ptr: &mut gst_sys::GstPad = &mut *(self.as_ptr() as *mut _);
glib_sys::g_rec_mutex_lock(&mut ptr.stream_rec_lock); glib_sys::g_rec_mutex_lock(&mut ptr.stream_rec_lock);
StreamLock(from_glib_none(ptr as *mut gst_sys::GstPad)) StreamLock(self.upcast_ref())
} }
} }