[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 16/19] qom: Make PropertyInfo.set_default_value optional
|
From: |
Eduardo Habkost |
|
Subject: |
[PATCH v3 16/19] qom: Make PropertyInfo.set_default_value optional |
|
Date: |
Mon, 23 Nov 2020 14:48:15 -0500 |
If .set_default_value is not set, call
object_property_set_default(). This will let us delete most of
the .set_default_value functions later.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch in v3 of this series.
In v2 of the series, equivalent functionality was implemented by
"qom: Use qlit to represent property defaults".
---
include/qom/field-property.h | 3 +++
qom/field-property.c | 12 ++++++++++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/include/qom/field-property.h b/include/qom/field-property.h
index 951cec2fb0..00b83ee9ba 100644
--- a/include/qom/field-property.h
+++ b/include/qom/field-property.h
@@ -53,6 +53,9 @@ struct PropertyInfo {
* @set_default_value: Callback for initializing the default value
*
* @defval is a weak reference.
+ *
+ * Optional. If not set and Property.defval is not QTYPE_NONE,
+ * object_property_set_default() will be called.
*/
void (*set_default_value)(ObjectProperty *op, const Property *prop,
const QObject *defval);
diff --git a/qom/field-property.c b/qom/field-property.c
index 593ffb53e9..d21ff98862 100644
--- a/qom/field-property.c
+++ b/qom/field-property.c
@@ -72,8 +72,16 @@ static void field_prop_set_default_value(ObjectProperty *op,
}
defval = qobject_from_qlit(&prop->defval);
- assert(prop->info->set_default_value);
- prop->info->set_default_value(op, prop, defval);
+ if (prop->info->set_default_value) {
+ /* .set_default_value() gets a weak reference */
+ prop->info->set_default_value(op, prop, defval);
+ } else {
+ /*
+ * object_property_set_default() takes ownership,
+ * so qobject_ref() is needed.
+ */
+ object_property_set_default(op, qobject_ref(defval));
+ }
qobject_unref(defval);
}
--
2.28.0
- Re: [PATCH v3 10/19] qlit: Support all types of QNums, (continued)
- [PATCH v3 09/19] qlit: Add more test literals to qlit_equal_qobject() test case, Eduardo Habkost, 2020/11/23
- [PATCH v3 08/19] qlit: Move qlit_equal_qobject() reference values to array, Eduardo Habkost, 2020/11/23
- [PATCH v3 11/19] qom: field_prop_set_default_value() helper, Eduardo Habkost, 2020/11/23
- [PATCH v3 12/19] qom: Replace defval value in Property with QLitObject, Eduardo Habkost, 2020/11/23
- [PATCH v3 13/19] qom: Fix documentation of UUID property type, Eduardo Habkost, 2020/11/23
- [PATCH v3 15/19] qom: Make object_property_set_default() public, Eduardo Habkost, 2020/11/23
- [PATCH v3 16/19] qom: Make PropertyInfo.set_default_value optional,
Eduardo Habkost <=
- [PATCH v3 17/19] qom: Delete field_prop_set_default_value_*int(), Eduardo Habkost, 2020/11/23
- [PATCH v3 14/19] qom: Don't ignore defval on UUID property, Eduardo Habkost, 2020/11/23
- [PATCH v3 19/19] qom: Delete set_default_value_bool(), Eduardo Habkost, 2020/11/23
- [PATCH v3 18/19] qom: Delete set_default_uuid(), Eduardo Habkost, 2020/11/23