block: Free th_node_list when block_exit 88/153688/2
authorpr.jung <pr.jung@samsung.com>
Fri, 29 Sep 2017 05:32:41 +0000 (14:32 +0900)
committerHyotaek Shim <hyotaek.shim@samsung.com>
Fri, 29 Sep 2017 07:33:57 +0000 (07:33 +0000)
Change-Id: Iceb902056361ee7e7d470d25cfa73706371c78e4
Signed-off-by: pr.jung <pr.jung@samsung.com>
src/block/block.c

index 10448b6..e3717d6 100644 (file)
@@ -1919,15 +1919,17 @@ static int find_thread(char *devnode)
                snprintf(str, SCSI_PARTITION_LENGTH, "/dev/sd%c", dev_scsi);
                th_node = strdup(str);
        } else
-               th_node = devnode;
+               th_node = strdup(devnode);
 
        len = strlen(th_node) + 1;
        min_num = 1000;
        min = -1;
        for (i = 0; i < THREAD_MAX; i++) {
                DD_LIST_FOREACH(th_manager[i].th_node_list, elem, temp) {
-                       if (!strncmp(temp, th_node, len))
+                       if (!strncmp(temp, th_node, len)) {
+                               free(th_node);
                                return i;
+                       }
                }
                if (th_manager[i].num_dev < min_num) {
                        min_num = th_manager[i].num_dev;
@@ -3444,6 +3446,8 @@ static void block_init(void *data)
 
 static void block_exit(void *data)
 {
+       dd_list *elem, *elem_next;
+       char *temp;
        int ret, i;
 
        udev_exit(NULL);
@@ -3472,6 +3476,10 @@ static void block_exit(void *data)
        for (i = 0; i < THREAD_MAX; i++) {
                if (!th_manager[i].start_th)
                        pthread_cancel(th_manager[i].th);
+               DD_LIST_FOREACH_SAFE(th_manager[i].th_node_list, elem, elem_next, temp) {
+                       DD_LIST_REMOVE(th_manager[i].th_node_list, temp);
+                       free(temp);
+               }
        }
 
        block_control = false;