From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751830AbbFYQYV (ORCPT ); Thu, 25 Jun 2015 12:24:21 -0400 Received: from mout.web.de ([212.227.17.12]:63137 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751122AbbFYQYT (ORCPT ); Thu, 25 Jun 2015 12:24:19 -0400 Message-ID: <558C2B29.8030005@users.sourceforge.net> Date: Thu, 25 Jun 2015 18:24:09 +0200 From: SF Markus Elfring User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Arnaldo Carvalho de Melo , Ingo Molnar , Peter Zijlstra CC: LKML , kernel-janitors@vger.kernel.org, Julia Lawall Subject: [PATCH 2/2] perf header: Less function calls in read_event_desc() after error detection References: <5307CAA2.8060406@users.sourceforge.net> <530A086E.8010901@users.sourceforge.net> <530A72AA.3000601@users.sourceforge.net> <530B5FB6.6010207@users.sourceforge.net> <530C5E18.1020800@users.sourceforge.net> <530CD2C4.4050903@users.sourceforge.net> <530CF8FF.8080600@users.sourceforge.net> <530DD06F.4090703@users.sourceforge.net> <5317A59D.4@users.sourceforge.net> <558C29E1.2040909@users.sourceforge.net> In-Reply-To: <558C29E1.2040909@users.sourceforge.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:WeQwkUYWHpUCOrsfHiSDa6ZbeOaksVxvCg48waF+0ArJAGxNuyy KZOvcecr8YyfldyhP41JuF+XX2LAqAsRjuPAPoKKvqPJjwbmL7mJQnXzI1rdWeE6K/zFNrl p0GdNFVUrP/wRD6uJtsLuD85BlFRdSKkY8AR7oNVijXB0jCtxXKtimQA90M4heLFLGaHjV0 I8AAZid0INxU8Tr2XqgMQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:NZbrffDu9uQ=:8a+1m9ZIj+bth2MhG2ori2 7JHbkFhaiRIJJnjMI+56iMSTclEyHqwS2uKrviYzl0vbrS8o8w+M3iBzsif7gmZ5SkMqF7ptb iiJHPGgX/MDYLse4vM40nL+HjDmWOgESTRt87Cy5A4k7I/RAFAHCCzdw5g311739x8J34ZUHV TdIkRy4TjGjV0AKK+Jlznc8ApK3E58ZJPMfjqXJmds1R63EL0OZBxvzgflV2664iw3b+D5ytX Q71DEG+6kbkh4fKpS4nk9WsUjiKQm8dbZLDEhaG7pWt9Jaq8cpX9/pjRM6+qoxHGm4MsFCRIC ee/BpGjeCpZSFeNS1j6A6/lJI/3zdJctQ7nxBwRwbgtEvu3XUrgnKrylGpaMH1PGFAUuQXsXi 4fAsqyl9h4gK2C+QTV0oVXQwVe/TWhEy9AItkiowZWwzu0vKpXHinGM5DhW0cEODw7deCnqnB NrailAT0IeOffqtBZcBcHCLIoQypyvBL1xFs8qORWqY4ZaqrgW+vZsC6H4Glk5+Htd4ZbDhDX rZ7aFENh4Y6EzPAaMoSYB2hH/8Escx5amzXz7cJce7FjybVeJt/Ex5RX/7xoiYDk9F8dNEp9N YqrzrILediZv9Ov5JsLoQwxHZOat3NC3roKvdX6AMM2LdnBa8Z6kK0s8CR3hHg3NqD6EQWl+P BFHZX/z9jeD4R1WcAV4X6Lscr3JgOQ9Y9vyTXQwS8Yo6FS7snHheSBqciQAC94b8Ruto= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Thu, 25 Jun 2015 17:50:37 +0200 The functions "free" and "free_event_desc" were called in a few cases by the function "read_event_desc" during error handling even if the passed variable contained a null pointer. This implementation detail could be improved by the adjustment of jump targets. Drop unnecessary initialisations for the variables "buf" and "events" then. Signed-off-by: Markus Elfring --- tools/perf/util/header.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 03ace57..8071163 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -978,9 +978,9 @@ static void free_event_desc(struct perf_evsel *events) static struct perf_evsel * read_event_desc(struct perf_header *ph, int fd) { - struct perf_evsel *evsel, *events = NULL; + struct perf_evsel *evsel, *events; u64 *id; - void *buf = NULL; + void *buf; u32 nre, sz, nr, i, j; ssize_t ret; size_t msz; @@ -988,14 +988,14 @@ read_event_desc(struct perf_header *ph, int fd) /* number of events */ ret = readn(fd, &nre, sizeof(nre)); if (ret != (ssize_t)sizeof(nre)) - goto error; + return NULL; if (ph->needs_swap) nre = bswap_32(nre); ret = readn(fd, &sz, sizeof(sz)); if (ret != (ssize_t)sizeof(sz)) - goto error; + return NULL; if (ph->needs_swap) sz = bswap_32(sz); @@ -1003,12 +1003,12 @@ read_event_desc(struct perf_header *ph, int fd) /* buffer to hold on file attr struct */ buf = malloc(sz); if (!buf) - goto error; + return NULL; /* the last event terminates with evsel->attr.size == 0: */ events = calloc(nre + 1, sizeof(*events)); if (!events) - goto error; + goto free_buffer; msz = sizeof(evsel->attr); if (sz < msz) @@ -1023,7 +1023,7 @@ read_event_desc(struct perf_header *ph, int fd) */ ret = readn(fd, buf, sz); if (ret != (ssize_t)sz) - goto error; + goto free_events; if (ph->needs_swap) perf_event__attr_swap(buf); @@ -1032,7 +1032,7 @@ read_event_desc(struct perf_header *ph, int fd) ret = readn(fd, &nr, sizeof(nr)); if (ret != (ssize_t)sizeof(nr)) - goto error; + goto free_events; if (ph->needs_swap) { nr = bswap_32(nr); @@ -1046,26 +1046,27 @@ read_event_desc(struct perf_header *ph, int fd) id = calloc(nr, sizeof(*id)); if (!id) - goto error; + goto free_events; evsel->ids = nr; evsel->id = id; for (j = 0 ; j < nr; j++) { ret = readn(fd, id, sizeof(*id)); if (ret != (ssize_t)sizeof(*id)) - goto error; + goto free_events; if (ph->needs_swap) *id = bswap_64(*id); id++; } } -out: + free(buf); return events; -error: +free_events: free_event_desc(events); - events = NULL; - goto out; +free_buffer: + free(buf); + return NULL; } static int __desc_attr__fprintf(FILE *fp, const char *name, const char *val, -- 2.4.4