Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 743df75f authored by Steven Rostedt's avatar Steven Rostedt Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarSteven 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 101782ea
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -209,7 +209,16 @@ static void free_arg(struct filter_arg *arg)
	switch (arg->type) {
	switch (arg->type) {
	case FILTER_ARG_NONE:
	case FILTER_ARG_NONE:
	case FILTER_ARG_BOOLEAN:
	case FILTER_ARG_BOOLEAN:
		break;

	case FILTER_ARG_NUM:
	case FILTER_ARG_NUM:
		free_arg(arg->num.left);
		free_arg(arg->num.right);
		break;

	case FILTER_ARG_EXP:
		free_arg(arg->exp.left);
		free_arg(arg->exp.right);
		break;
		break;


	case FILTER_ARG_STR:
	case FILTER_ARG_STR:
@@ -218,6 +227,12 @@ static void free_arg(struct filter_arg *arg)
		free(arg->str.buffer);
		free(arg->str.buffer);
		break;
		break;


	case FILTER_ARG_VALUE:
		if (arg->value.type == FILTER_STRING ||
		    arg->value.type == FILTER_CHAR)
			free(arg->value.str);
		break;

	case FILTER_ARG_OP:
	case FILTER_ARG_OP:
		free_arg(arg->op.left);
		free_arg(arg->op.left);
		free_arg(arg->op.right);
		free_arg(arg->op.right);