Merge branch 'fix_ref' into 'master'
Variant: Use proper pointer conversion between C and Rust See merge request Librem5/squeekboard!334
This commit is contained in:
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user