On Tue, Oct 22, 2024 at 6:31 AM Philippe Mathieu-Daudé
<[email protected]> wrote:
> > -void qdev_property_add_static(DeviceState *dev, Property *prop)
> > +void qdev_property_add_static(DeviceState *dev, const Property *prop)
> > {
> > Object *obj = OBJECT(dev);
> > ObjectProperty *op;
> > @@ -980,7 +980,7 @@ void qdev_property_add_static(DeviceState *dev,
> > Property *prop)
> > field_prop_getter(prop->info),
> > field_prop_setter(prop->info),
> > prop->info->release,
> > - prop);
> > + (Property *)prop);
>
> I like the overall patch idea, but I'm not keen on casting
> const to non-const. Should we adapt the callee -- here
> object_property_add() -- to also take a const argument?
This argument goes into prop->opaque and is passed to all
accessor/resolver/finalizers functions. So it would be a much larger
change because it needs to change all those functions from "void
*opaque" to "const void *opaque".
It would also be an issue because some finalizers write to the opaque
for good reason:
static void object_finalize_child_property(
Object *obj, const char *name, void *opaque)
{
Object *child = opaque;
if (child->class->unparent) {
(child->class->unparent)(child);
}
child->parent = NULL; // <--- here
object_unref(child);
}
So, it's not great but it seems necessary. At least keeping the const
within qdev properties makes things "safer" within that realm.
Paolo