Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1417361 > unrolled thread
| Started by | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| First post | 2016-06-08 14:40 +0200 |
| Last post | 2016-06-10 13:10 +0200 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v8 4/5] perf config: Use zfree() instead of free() at perf_config_set__delete() Taeung Song <treeze.taeung@gmail.com> - 2016-06-08 14:40 +0200
Re: [PATCH v8 4/5] perf config: Use zfree() instead of free() at perf_config_set__delete() Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-06-09 15:40 +0200
Re: [PATCH v8 4/5] perf config: Use zfree() instead of free() at perf_config_set__delete() Taeung Song <treeze.taeung@gmail.com> - 2016-06-10 13:10 +0200
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-06-08 14:40 +0200 |
| Subject | [PATCH v8 4/5] perf config: Use zfree() instead of free() at perf_config_set__delete() |
| Message-ID | <rHKW5-7x-1@gated-at.bofh.it> |
perf_config_set__delete() delete allocated the config set
but the global variable 'config_set' is used all around.
So purge and zfree by an address of the global variable
, i.e. 'struct perf_config_set **' type
instead of using local variable 'set' of which type
is 'struct perf_config_set *'.
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/builtin-config.c | 2 +-
tools/perf/perf.c | 2 +-
tools/perf/util/config.c | 10 +++++-----
tools/perf/util/config.h | 2 +-
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
index cfd1036..c07f744 100644
--- a/tools/perf/builtin-config.c
+++ b/tools/perf/builtin-config.c
@@ -110,7 +110,7 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
usage_with_options(config_usage, config_options);
}
- perf_config_set__delete(set);
+ perf_config_set__delete(&set);
out_err:
return ret;
}
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index fe2ab7c..058d5dc 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -391,7 +391,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
perf_env__set_cmdline(&perf_env, argc, argv);
status = p->fn(argc, argv, prefix);
- perf_config_set__delete(config_set);
+ perf_config_set__delete(&config_set);
exit_browser(status);
perf_env__exit(&perf_env);
bpf__clear();
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index 72db134..23fb8e4 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -654,7 +654,7 @@ struct perf_config_set *perf_config_set__new(void)
if (set) {
INIT_LIST_HEAD(&set->sections);
if (perf_config_set__init(set) < 0) {
- perf_config_set__delete(set);
+ perf_config_set__delete(&set);
set = NULL;
}
}
@@ -737,13 +737,13 @@ static void perf_config_set__purge(struct perf_config_set *set)
}
}
-void perf_config_set__delete(struct perf_config_set *set)
+void perf_config_set__delete(struct perf_config_set **set)
{
- if (set == NULL)
+ if (*set == NULL)
return;
- perf_config_set__purge(set);
- free(set);
+ perf_config_set__purge(*set);
+ zfree(set);
}
/*
diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index 7cc4fea..fafba86 100644
--- a/tools/perf/util/config.h
+++ b/tools/perf/util/config.h
@@ -34,6 +34,6 @@ const char *perf_config_dirname(const char *, const char *);
const char *perf_etc_perfconfig(void);
struct perf_config_set *perf_config_set__new(void);
-void perf_config_set__delete(struct perf_config_set *set);
+void perf_config_set__delete(struct perf_config_set **set);
#endif /* __PERF_CONFIG_H */
--
2.5.0
[toc] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-06-09 15:40 +0200 |
| Subject | Re: [PATCH v8 4/5] perf config: Use zfree() instead of free() at perf_config_set__delete() |
| Message-ID | <rI8lI-6YM-31@gated-at.bofh.it> |
| In reply to | #1417361 |
Em Wed, Jun 08, 2016 at 09:36:52PM +0900, Taeung Song escreveu:
> perf_config_set__delete() delete allocated the config set
> but the global variable 'config_set' is used all around.
> So purge and zfree by an address of the global variable
> , i.e. 'struct perf_config_set **' type
> instead of using local variable 'set' of which type
> is 'struct perf_config_set *'.
> -void perf_config_set__delete(struct perf_config_set *set)
> +void perf_config_set__delete(struct perf_config_set **set)
> {
> - if (set == NULL)
> + if (*set == NULL)
> return;
>
> - perf_config_set__purge(set);
> - free(set);
> + perf_config_set__purge(*set);
> + zfree(set);
> }
Nope, don't change conventions like taht, a delete method should not
receive a pointer to the pointer to be deleted, no odd cases, please.
If you really think this is interesting, please introduce zdelete(),
i.e.:
void perf_config_set__zdelete(struct perf_config_set **set)
{
if (!set)
return;
perf_config_set__delete(*set);
*set = NULL;
}
- Arnaldo
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-06-10 13:10 +0200 |
| Subject | Re: [PATCH v8 4/5] perf config: Use zfree() instead of free() at perf_config_set__delete() |
| Message-ID | <rIsu5-3Oy-19@gated-at.bofh.it> |
| In reply to | #1418325 |
On 06/09/2016 10:37 PM, Arnaldo Carvalho de Melo wrote:
> Em Wed, Jun 08, 2016 at 09:36:52PM +0900, Taeung Song escreveu:
>> perf_config_set__delete() delete allocated the config set
>> but the global variable 'config_set' is used all around.
>
>> So purge and zfree by an address of the global variable
>> , i.e. 'struct perf_config_set **' type
>> instead of using local variable 'set' of which type
>> is 'struct perf_config_set *'.
>
>> -void perf_config_set__delete(struct perf_config_set *set)
>> +void perf_config_set__delete(struct perf_config_set **set)
>> {
>> - if (set == NULL)
>> + if (*set == NULL)
>> return;
>>
>> - perf_config_set__purge(set);
>> - free(set);
>> + perf_config_set__purge(*set);
>> + zfree(set);
>> }
>
> Nope, don't change conventions like taht, a delete method should not
> receive a pointer to the pointer to be deleted, no odd cases, please.
>
> If you really think this is interesting, please introduce zdelete(),
> i.e.:
>
> void perf_config_set__zdelete(struct perf_config_set **set)
> {
> if (!set)
> return;
>
> perf_config_set__delete(*set);
> *set = NULL;
> }
>
I understood!
If we don't use the config set as a global variable,
it seems that we wouldn't need to change perf_config_set__delete() to
perf_config_set__zdelete() as this patch.
Thanks,
Taeung
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web