[Qemu-devel] [PATCH v5 02/11] qom: don't require user creatable objects to be registered

Daniel P. Berrangé posted 11 patches 7 years, 4 months ago
There is a newer version of this series
[Qemu-devel] [PATCH v5 02/11] qom: don't require user creatable objects to be registered
Posted by Daniel P. Berrangé 7 years, 4 months ago
When an object is in turn owned by another user object, it is not
desirable to expose this in the QOM object hierarchy, as it is
just an internal implementation detail, we should be free to change
without exposure.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 qom/object.c            | 12 ++++++++----
 qom/object_interfaces.c | 16 ++++++++++------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/qom/object.c b/qom/object.c
index 547dcf97c3..f20f0c45a7 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -607,15 +607,19 @@ Object *object_new_with_propv(const char *typename,
         goto error;
     }
 
-    object_property_add_child(parent, id, obj, &local_err);
-    if (local_err) {
-        goto error;
+    if (id != NULL) {
+        object_property_add_child(parent, id, obj, &local_err);
+        if (local_err) {
+            goto error;
+        }
     }
 
     if (object_dynamic_cast(obj, TYPE_USER_CREATABLE)) {
         user_creatable_complete(obj, &local_err);
         if (local_err) {
-            object_unparent(obj);
+            if (id != NULL) {
+                object_unparent(obj);
+            }
             goto error;
         }
     }
diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
index 941fd63afd..94d5f91d69 100644
--- a/qom/object_interfaces.c
+++ b/qom/object_interfaces.c
@@ -83,16 +83,20 @@ Object *user_creatable_add_type(const char *type, const char *id,
         goto out;
     }
 
-    object_property_add_child(object_get_objects_root(),
-                              id, obj, &local_err);
-    if (local_err) {
-        goto out;
+    if (id != NULL) {
+        object_property_add_child(object_get_objects_root(),
+                                  id, obj, &local_err);
+        if (local_err) {
+            goto out;
+        }
     }
 
     user_creatable_complete(obj, &local_err);
     if (local_err) {
-        object_property_del(object_get_objects_root(),
-                            id, &error_abort);
+        if (id != NULL) {
+            object_property_del(object_get_objects_root(),
+                                id, &error_abort);
+        }
         goto out;
     }
 out:
-- 
2.17.1


Re: [Qemu-devel] [PATCH v5 02/11] qom: don't require user creatable objects to be registered
Posted by Philippe Mathieu-Daudé 7 years, 3 months ago
On 09/10/2018 15:04, Daniel P. Berrangé wrote:
> When an object is in turn owned by another user object, it is not
> desirable to expose this in the QOM object hierarchy, as it is
> just an internal implementation detail, we should be free to change
> without exposure.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---
>  qom/object.c            | 12 ++++++++----
>  qom/object_interfaces.c | 16 ++++++++++------
>  2 files changed, 18 insertions(+), 10 deletions(-)
> 
> diff --git a/qom/object.c b/qom/object.c
> index 547dcf97c3..f20f0c45a7 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -607,15 +607,19 @@ Object *object_new_with_propv(const char *typename,
>          goto error;
>      }
>  
> -    object_property_add_child(parent, id, obj, &local_err);
> -    if (local_err) {
> -        goto error;
> +    if (id != NULL) {
> +        object_property_add_child(parent, id, obj, &local_err);
> +        if (local_err) {
> +            goto error;
> +        }
>      }
>  
>      if (object_dynamic_cast(obj, TYPE_USER_CREATABLE)) {
>          user_creatable_complete(obj, &local_err);
>          if (local_err) {
> -            object_unparent(obj);
> +            if (id != NULL) {
> +                object_unparent(obj);
> +            }
>              goto error;
>          }
>      }
> diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
> index 941fd63afd..94d5f91d69 100644
> --- a/qom/object_interfaces.c
> +++ b/qom/object_interfaces.c
> @@ -83,16 +83,20 @@ Object *user_creatable_add_type(const char *type, const char *id,
>          goto out;
>      }
>  
> -    object_property_add_child(object_get_objects_root(),
> -                              id, obj, &local_err);
> -    if (local_err) {
> -        goto out;
> +    if (id != NULL) {
> +        object_property_add_child(object_get_objects_root(),
> +                                  id, obj, &local_err);
> +        if (local_err) {
> +            goto out;
> +        }
>      }
>  
>      user_creatable_complete(obj, &local_err);
>      if (local_err) {
> -        object_property_del(object_get_objects_root(),
> -                            id, &error_abort);
> +        if (id != NULL) {
> +            object_property_del(object_get_objects_root(),
> +                                id, &error_abort);
> +        }
>          goto out;
>      }
>  out:
> 

Re: [Qemu-devel] [PATCH v5 02/11] qom: don't require user creatable objects to be registered
Posted by Philippe Mathieu-Daudé 7 years, 3 months ago
On 10/10/2018 17:11, Philippe Mathieu-Daudé wrote:
> On 09/10/2018 15:04, Daniel P. Berrangé wrote:
>> When an object is in turn owned by another user object, it is not
>> desirable to expose this in the QOM object hierarchy, as it is
>> just an internal implementation detail, we should be free to change
>> without exposure.
>>
>> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> 
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> 
>> ---
>>  qom/object.c            | 12 ++++++++----
>>  qom/object_interfaces.c | 16 ++++++++++------
>>  2 files changed, 18 insertions(+), 10 deletions(-)
>>
>> diff --git a/qom/object.c b/qom/object.c
>> index 547dcf97c3..f20f0c45a7 100644
>> --- a/qom/object.c
>> +++ b/qom/object.c
>> @@ -607,15 +607,19 @@ Object *object_new_with_propv(const char *typename,
>>          goto error;
>>      }
>>  
>> -    object_property_add_child(parent, id, obj, &local_err);
>> -    if (local_err) {
>> -        goto error;
>> +    if (id != NULL) {
>> +        object_property_add_child(parent, id, obj, &local_err);
>> +        if (local_err) {
>> +            goto error;
>> +        }
>>      }
>>  
>>      if (object_dynamic_cast(obj, TYPE_USER_CREATABLE)) {
>>          user_creatable_complete(obj, &local_err);
>>          if (local_err) {
>> -            object_unparent(obj);
>> +            if (id != NULL) {
>> +                object_unparent(obj);
>> +            }
>>              goto error;
>>          }
>>      }
>> diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
>> index 941fd63afd..94d5f91d69 100644
>> --- a/qom/object_interfaces.c
>> +++ b/qom/object_interfaces.c
>> @@ -83,16 +83,20 @@ Object *user_creatable_add_type(const char *type, const char *id,
>>          goto out;
>>      }
>>  
>> -    object_property_add_child(object_get_objects_root(),
>> -                              id, obj, &local_err);
>> -    if (local_err) {
>> -        goto out;
>> +    if (id != NULL) {
>> +        object_property_add_child(object_get_objects_root(),
>> +                                  id, obj, &local_err);
>> +        if (local_err) {
>> +            goto out;
>> +        }
>>      }
>>  
>>      user_creatable_complete(obj, &local_err);
>>      if (local_err) {
>> -        object_property_del(object_get_objects_root(),
>> -                            id, &error_abort);
>> +        if (id != NULL) {
>> +            object_property_del(object_get_objects_root(),
>> +                                id, &error_abort);
>> +        }
>>          goto out;
>>      }
>>  out:
>>