resource-manager: revamp init/exit of resource driver 10/288010/1
authorYoungjae Cho <y0.cho@samsung.com>
Thu, 9 Feb 2023 04:39:57 +0000 (13:39 +0900)
committerYoungjae Cho <y0.cho@samsung.com>
Thu, 9 Feb 2023 04:39:57 +0000 (13:39 +0900)
Change-Id: I24bf3bd1b93bbe53c170522bc039b082191989de
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
src/resource-manager/resource-manager.c

index 71d1a9d..7167ca2 100644 (file)
@@ -1260,31 +1260,32 @@ syscommon_resman_set_resource_privdata(int resource_id, void *priv)
        return 0;
 }
 
-void syscommon_resman_init_resource_drivers(void)
+static void init_resource_driver(gpointer data, gpointer udata)
 {
-       struct syscommon_resman_resource_driver *driver;
-       int i, ret = 0;
-
-       for (i = 0; i < g_list_length(g_resource_driver_head); i++) {
-               driver = g_list_nth(g_list_first(g_resource_driver_head), i)->data;
+       struct syscommon_resman_resource_driver *driver = (struct syscommon_resman_resource_driver *) data;
+       int ret = 0;
 
-               if (driver->ops.init) {
-                       ret = driver->ops.init();
-                       if (ret < 0)
-                               syscommon_resman_remove_resource_driver(driver);
-               }
+       if (driver && driver->ops.init) {
+               ret = driver->ops.init();
+               if (ret < 0)
+                       syscommon_resman_remove_resource_driver(driver);
        }
 }
 
-void syscommon_resman_exit_resource_drivers(void)
+static void exit_resource_driver(gpointer data, gpointer udata)
 {
-       const struct syscommon_resman_resource_driver *driver;
-       int i;
+       struct syscommon_resman_resource_driver *driver = (struct syscommon_resman_resource_driver *) data;
 
-       for (i = 0; i < g_list_length(g_resource_driver_head); i++) {
-               driver = g_list_nth(g_list_first(g_resource_driver_head), i)->data;
+       if (driver && driver->ops.exit)
+               driver->ops.exit();
+}
 
-               if (driver->ops.exit)
-                       driver->ops.exit();
-       }
+void syscommon_resman_init_resource_drivers(void)
+{
+       g_list_foreach(g_resource_driver_head, init_resource_driver, NULL);
+}
+
+void syscommon_resman_exit_resource_drivers(void)
+{
+       g_list_foreach(g_resource_driver_head, exit_resource_driver, NULL);
 }