Variant: Use proper pointer conversion between C and Rust

This commit is contained in:
Dorota Czaplejewicz
2020-02-20 12:17:50 +00:00
parent da1f480f7a
commit c0aee5de26

View File

@ -29,6 +29,7 @@ mod variants {
use glib::ToVariant; use glib::ToVariant;
use glib::translate::FromGlibPtrFull; use glib::translate::FromGlibPtrFull;
use glib::translate::FromGlibPtrNone;
use glib::translate::ToGlibPtr; use glib::translate::ToGlibPtr;
/// Unpacks tuple & array variants /// Unpacks tuple & array variants
@ -91,12 +92,7 @@ mod variants {
unsafe { unsafe {
let ret = glib_sys::g_variant_builder_end(builder); let ret = glib_sys::g_variant_builder_end(builder);
glib_sys::g_variant_builder_unref(builder); glib_sys::g_variant_builder_unref(builder);
// HACK: This is to prevent C taking ownership glib::Variant::from_glib_none(ret)
// of "floating" Variants,
// where Rust gets to keep a stale reference
// and crash when trying to drop it.
glib_sys::g_variant_ref_sink(ret);
glib::Variant::from_glib_full(ret)
} }
} }
} }