resource-manager: Relocate add_resource() in create_resource() 94/289494/3
authorYoungjae Cho <y0.cho@samsung.com>
Thu, 9 Mar 2023 00:23:06 +0000 (09:23 +0900)
committerYoungjae Cho <y0.cho@samsung.com>
Thu, 9 Mar 2023 04:30:34 +0000 (13:30 +0900)
If operations following the add_resource() fail, then it is necessary
to cleanup resource instance from hashtable that has been added by
add_resource(). Instead of impelementing cleanup, move add_resource()
to the end of create_resource() so that nothing follow add_resource().

Change-Id: I705a3dc3487c8ebf9e80cff51b7e89069a6a4f1a
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
src/resource-manager/resource-manager.c

index b3f3b9d3553c7e74de931322a1b6bd0509c55752..a870a0bc70250d6498353e4d0e8a83867a23fc22 100644 (file)
@@ -248,12 +248,6 @@ create_resource(int *resource_id, int resource_type, int instance_type)
                return -ENOMEM;
        }
 
-       ret = add_resource(resource);
-       if (ret < 0) {
-               free_resource(resource);
-               return ret;
-       }
-
        for (i = 0; i < resource->num_attrs; i++)
                resource->attrs_value[i].type = driver->attrs[i].type;
 
@@ -271,6 +265,14 @@ create_resource(int *resource_id, int resource_type, int instance_type)
 
        *resource_id = resource->id;
 
+       ret = add_resource(resource);
+       if (ret < 0) {
+               if (driver->ops.delete)
+                       driver->ops.delete(resource->id);
+               free_resource(resource);
+               return ret;
+       }
+
        return 0;
 }