> +unsafe extern "C" fn rust_instance_init<T: ObjectImpl>(obj: *mut Object) {
> +    // SAFETY: obj is an instance of T, since rust_instance_init<T>
> +    // is called from QOM core as the instance_init function
> +    // for class T
> +    unsafe { T::INSTANCE_INIT.unwrap()(&mut *obj.cast::<T>()) }
> +}

Here's the difference, why doesn't init() narrow the unsafe scope like
post_init() does?

> +unsafe extern "C" fn rust_instance_post_init<T: ObjectImpl>(obj: *mut 
> Object) {
> +    // SAFETY: obj is an instance of T, since rust_instance_post_init<T>
> +    // is called from QOM core as the instance_post_init function
> +    // for class T
> +    //
> +    // FIXME: it's not really guaranteed that there are no backpointers to
> +    // obj; it's quite possible that they have been created by 
> instance_init().
> +    // The receiver should be &self, not &mut self.
> +    T::INSTANCE_POST_INIT.unwrap()(unsafe { &mut *obj.cast::<T>() })
> +}
> +



Reply via email to