On Sat, Feb 23, 2019 at 02:07:53PM +0900, Namhyung Kim wrote: SNIP
> > +static void close_dir(struct perf_data_file *files, int nr) > > +{ > > + while (--nr >= 1) { > > + close(files[nr].fd); > > + free(files[nr].path); > > + } > > + free(files); > > +} > > + > > +void perf_data__close_dir(struct perf_data *data) > > +{ > > + close_dir(data->dir.files, data->dir.nr); > > +} > > + > > +int perf_data__create_dir(struct perf_data *data, int nr) > > +{ > > + struct perf_data_file *files = NULL; > > + int i, ret = -1; > > + > > + files = malloc(nr * sizeof(*files)); > > + if (!files) > > + return -ENOMEM; > > + > > + data->dir.files = files; > > + data->dir.nr = nr; > > + > > + for (i = 0; i < nr; i++) { > > + struct perf_data_file *file = &files[i]; > > + > > + if (asprintf(&file->path, "%s/data.%d", data->path, i) < 0) > > + goto out_err; > > + > > + ret = open(file->path, O_RDWR|O_CREAT|O_TRUNC, > > S_IRUSR|S_IWUSR); > > + if (ret < 0) > > + goto out_err; > > It seems you need to free the file->path here. it'll be freed in the close_dir call below, I need to call zalloc to make sure it's ok jirka > > Thanks, > Namhyung > > > > + > > + file->fd = ret; > > + } > > + > > + return 0; > > + > > +out_err: > > + close_dir(files, i); > > + return ret; > > +} > > + > > static bool check_pipe(struct perf_data *data) > > { > > struct stat st; SNIP