diff --git a/gstreamer/src/lib.rs b/gstreamer/src/lib.rs index 769ae54ec..5889a6a5c 100644 --- a/gstreamer/src/lib.rs +++ b/gstreamer/src/lib.rs @@ -174,3 +174,5 @@ pub mod prelude { pub use tags::Tag; pub use miniobject::MiniObject; } + +mod utils; diff --git a/gstreamer/src/utils.rs b/gstreamer/src/utils.rs new file mode 100644 index 000000000..f4b3a292d --- /dev/null +++ b/gstreamer/src/utils.rs @@ -0,0 +1,29 @@ +// Copyright (C) 2017 Sebastian Dröge +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use glib::translate::mut_override; +use glib_ffi; + +pub struct MutexGuard<'a>(&'a glib_ffi::GMutex); + +impl<'a> MutexGuard<'a> { + pub fn lock(mutex: &'a glib_ffi::GMutex) -> Self { + unsafe { + glib_ffi::g_mutex_lock(mut_override(mutex)); + } + MutexGuard(mutex) + } +} + +impl<'a> Drop for MutexGuard<'a> { + fn drop(&mut self) { + unsafe { + glib_ffi::g_mutex_unlock(mut_override(self.0)); + } + } +}