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;
static void block_exit(void *data)
{
+ dd_list *elem, *elem_next;
+ char *temp;
int ret, i;
udev_exit(NULL);
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;