All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Namhyung Kim <namhyung@kernel.org>,
	Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Ingo Molnar <mingo@kernel.org>, Paul Mackerras <paulus@samba.org>,
	Namhyung Kim <namhyung.kim@lge.com>,
	LKML <linux-kernel@vger.kernel.org>, Jiri Olsa <jolsa@redhat.com>,
	David Ahern <dsahern@gmail.com>
Subject: Re: [PATCH] perf script: Fix possible memory leaks
Date: Fri, 01 Aug 2014 14:32:19 +0300	[thread overview]
Message-ID: <53DB7AC3.3030207@intel.com> (raw)
In-Reply-To: <1406881486-5789-1-git-send-email-namhyung@kernel.org>

On 1/08/2014 11:24 a.m., Namhyung Kim wrote:
> Some paths in perf script don't call perf_session__delete() after
> creating a new session.
>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
>   tools/perf/builtin-script.c | 31 ++++++++++++++++++-------------
>   1 file changed, 18 insertions(+), 13 deletions(-)
>
> diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
> index f57035b89c15..df0f84d7e825 100644
> --- a/tools/perf/builtin-script.c
> +++ b/tools/perf/builtin-script.c
> @@ -1476,7 +1476,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
>   	struct perf_session *session;
>   	char *script_path = NULL;
>   	const char **__argv;
> -	int i, j, err;
> +	int i, j, err = 0;
>   	struct perf_script script = {
>   		.tool = {
>   			.sample		 = process_sample_event,
> @@ -1730,14 +1730,15 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
>   	if (header || header_only) {
>   		perf_session__fprintf_info(session, stdout, show_full_info);
>   		if (header_only)
> -			return 0;
> +			goto out_delete;
>   	}
>
>   	script.session = session;
>
>   	if (cpu_list) {
> -		if (perf_session__cpu_bitmap(session, cpu_list, cpu_bitmap))
> -			return -1;
> +		err = perf_session__cpu_bitmap(session, cpu_list, cpu_bitmap);
> +		if (err < 0)
> +			goto out_delete;
>   	}
>
>   	if (!no_callchain)
> @@ -1752,53 +1753,57 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
>   		if (output_set_by_user()) {
>   			fprintf(stderr,
>   				"custom fields not supported for generated scripts");
> -			return -1;
> +			err = -EINVAL;
> +			goto out_delete;
>   		}
>
>   		input = open(file.path, O_RDONLY);	/* input_name */
>   		if (input < 0) {
>   			perror("failed to open file");
> -			return -1;
> +			err = -errno;
> +			goto out_delete;
>   		}
>
>   		err = fstat(input, &perf_stat);
>   		if (err < 0) {
>   			perror("failed to stat file");
> -			return -1;
> +			goto out_delete;
>   		}
>
>   		if (!perf_stat.st_size) {
>   			fprintf(stderr, "zero-sized file, nothing to do!\n");
> -			return 0;
> +			goto out_delete;
>   		}
>
>   		scripting_ops = script_spec__lookup(generate_script_lang);
>   		if (!scripting_ops) {
>   			fprintf(stderr, "invalid language specifier");
> -			return -1;
> +			err = -ENOENT;
> +			goto out_delete;
>   		}
>
>   		err = scripting_ops->generate_script(session->tevent.pevent,
>   						     "perf-script");
> -		goto out;
> +		goto out_delete;
>   	}
>
>   	if (script_name) {
>   		err = scripting_ops->start_script(script_name, argc, argv);
>   		if (err)
> -			goto out;
> +			goto out_delete;
>   		pr_debug("perf script started with script %s\n\n", script_name);
>   	}
>
>
>   	err = perf_session__check_output_opt(session);
>   	if (err < 0)
> -		goto out;
> +		goto out_delete;
>
>   	err = __cmd_script(&script);
>
> -	perf_session__delete(session);
>   	cleanup_scripting();
> +out_delete:
> +	perf_session__delete(session);

Some of the db-export scripting I do relies on the session
being deleted before the script is stopped.  I would prefer
the original order i.e. perf_session__delete() then
cleanup_scripting()

  reply	other threads:[~2014-08-01 11:32 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-01  8:24 [PATCH] perf script: Fix possible memory leaks Namhyung Kim
2014-08-01 11:32 ` Adrian Hunter [this message]
2014-08-11  7:45   ` Namhyung Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53DB7AC3.3030207@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=dsahern@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung.kim@lge.com \
    --cc=namhyung@kernel.org \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.