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