diff options
| author | Steven Rostedt <rostedt@goodmis.org> | 2012-10-01 20:23:28 -0400 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-10-16 12:07:05 -0400 |
| commit | 743df75ff10630f1f2a461f0f4b51f601f53ec44 (patch) | |
| tree | 488d930073d83174f4244bed3deedac1acb04326 | |
| parent | 101782ea2c6984cf169631c59df76b8497899caf (diff) | |
tools lib traceevent: Fix missed freeing of subargs in free_arg() in filter
Some of args were missed in free_args(), as well as subargs.
That is args like FILTER_ARG_NUM have left and right pointers to other
args that also need to be freed.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/1349137408.22822.135.camel@gandalf.local.home
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
| -rw-r--r-- | tools/lib/traceevent/parse-filter.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/tools/lib/traceevent/parse-filter.c b/tools/lib/traceevent/parse-filter.c index ad17855528f9..5ea4326ad11f 100644 --- a/tools/lib/traceevent/parse-filter.c +++ b/tools/lib/traceevent/parse-filter.c | |||
| @@ -209,7 +209,16 @@ static void free_arg(struct filter_arg *arg) | |||
| 209 | switch (arg->type) { | 209 | switch (arg->type) { |
| 210 | case FILTER_ARG_NONE: | 210 | case FILTER_ARG_NONE: |
| 211 | case FILTER_ARG_BOOLEAN: | 211 | case FILTER_ARG_BOOLEAN: |
| 212 | break; | ||
| 213 | |||
| 212 | case FILTER_ARG_NUM: | 214 | case FILTER_ARG_NUM: |
| 215 | free_arg(arg->num.left); | ||
| 216 | free_arg(arg->num.right); | ||
| 217 | break; | ||
| 218 | |||
| 219 | case FILTER_ARG_EXP: | ||
| 220 | free_arg(arg->exp.left); | ||
| 221 | free_arg(arg->exp.right); | ||
| 213 | break; | 222 | break; |
| 214 | 223 | ||
| 215 | case FILTER_ARG_STR: | 224 | case FILTER_ARG_STR: |
| @@ -218,6 +227,12 @@ static void free_arg(struct filter_arg *arg) | |||
| 218 | free(arg->str.buffer); | 227 | free(arg->str.buffer); |
| 219 | break; | 228 | break; |
| 220 | 229 | ||
| 230 | case FILTER_ARG_VALUE: | ||
| 231 | if (arg->value.type == FILTER_STRING || | ||
| 232 | arg->value.type == FILTER_CHAR) | ||
| 233 | free(arg->value.str); | ||
| 234 | break; | ||
| 235 | |||
| 221 | case FILTER_ARG_OP: | 236 | case FILTER_ARG_OP: |
| 222 | free_arg(arg->op.left); | 237 | free_arg(arg->op.left); |
| 223 | free_arg(arg->op.right); | 238 | free_arg(arg->op.right); |
