block: Free th_node_list when block_exit 65/153665/1
authorpr.jung <pr.jung@samsung.com>
Fri, 29 Sep 2017 05:32:41 +0000 (14:32 +0900)
committerpr.jung <pr.jung@samsung.com>
Fri, 29 Sep 2017 05:32:41 +0000 (14:32 +0900)
Change-Id: Iceb902056361ee7e7d470d25cfa73706371c78e4
Signed-off-by: pr.jung <pr.jung@samsung.com>
src/block/block.c

index 7bce7e1..d61bc37 100644 (file)
@@ -1915,15 +1915,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;
@@ -3440,6 +3442,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);
@@ -3468,6 +3472,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;