Originally the local pending_list is not guaranteed to be freed upon
fails, it should be emptyed and the elements should be freed.
Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
dirp = opendir(dirname);
if (!dirp) {
fprintf(stderr, "Unable to open %s for scanning\n", dirname);
- free(fullpath);
- return -ENOENT;
+ ret = -ENOENT;
+ goto fail;
}
while(1) {
dirent = readdir(dirp);
fail:
free(pending);
free(fullpath);
+ while (!list_empty(&pending_list)) {
+ pending = list_entry(pending_list.next, struct pending_dir,
+ list);
+ list_del(&pending->list);
+ free(pending);
+ }
if (dirp)
closedir(dirp);
return ret;