util: timer: Fix possible dangling pointer and memory leak 31/274931/1 accepted/tizen/unified/20220525.010040 submit/tizen/20220520.031909
authorDongwoo Lee <dwoo08.lee@samsung.com>
Thu, 12 May 2022 07:09:32 +0000 (16:09 +0900)
committerDongwoo Lee <dwoo08.lee@samsung.com>
Thu, 12 May 2022 07:16:48 +0000 (16:16 +0900)
Change-Id: I466617b365e91108c0ed3cdf1d95c8a237feaad8
Signed-off-by: Dongwoo Lee <dwoo08.lee@samsung.com>
src/util/timer.c

index 849baef..26aad82 100644 (file)
@@ -38,19 +38,11 @@ struct uevent_data {
        int fd;
 };
 
-static gint __compare_timer_id(gconstpointer data, gconstpointer input)
-{
-       guint id= *(guint *)data;
-       guint input_id = *(guint *)input;
-
-       return (id == input_id) ? 0 : -1;
-}
-
 static bool find_timer(int id)
 {
        GList *node;
 
-       node = g_list_find_custom(g_timer_list, &id, __compare_timer_id);
+       node = g_list_find(g_timer_list, GINT_TO_POINTER(id));
 
        if (!node)
                return false;
@@ -89,8 +81,7 @@ int add_timer_handler(unsigned int interval,
        if (!timer_id)
                return -EPERM;
 
-       g_timer_list = g_list_append(g_timer_list,
-                                       (gpointer)&timer_id);
+       g_timer_list = g_list_append(g_timer_list, GINT_TO_POINTER(timer_id));
 
        return timer_id;
 }
@@ -101,8 +92,7 @@ void delete_timer_handler(int timer_id)
                return;
 
        g_source_remove(timer_id);
-       g_timer_list = g_list_remove(g_timer_list,
-                                       (gpointer)&timer_id);
+       g_timer_list = g_list_remove(g_timer_list, GINT_TO_POINTER(timer_id));
 }
 
 struct udev_monitor *add_uevent_handler(
@@ -215,6 +205,7 @@ void delete_uevent_handler(struct udev_monitor *udev_monitor)
 
        g_source_remove(uevent_data->fd);
        uevent_data->fd = -1;
+       free(uevent_data);
 }
 
 void init_timer(void)
@@ -235,7 +226,7 @@ void exit_timer(void)
         */
 
        g_list_free(g_timer_list);
-       g_list_free(g_uevent_list);
+       g_list_free_full(g_uevent_list, free);
 
        g_timer_list = NULL;
        g_uevent_list = NULL;