For the frequent idiom of:
free(ptr);
ptr = NULL;
Make it expect a pointer to the pointer being freed, so that it becomes
clear at first sight that the variable being freed is being modified.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-pfw02ezuab37kha18wlut7ir@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
22 files changed:
}
if (lookup_path(buf))
goto out;
}
if (lookup_path(buf))
goto out;
- free(buf);
- buf = NULL;
}
if (!strcmp(arch, "arm"))
}
if (!strcmp(arch, "arm"))
* symbol, free he->ms.sym->src to signal we already
* processed this symbol.
*/
* symbol, free he->ms.sym->src to signal we already
* processed this symbol.
*/
- free(notes->src);
- notes->src = NULL;
static void perf_evsel__free_stat_priv(struct perf_evsel *evsel)
{
static void perf_evsel__free_stat_priv(struct perf_evsel *evsel)
{
- free(evsel->priv);
- evsel->priv = NULL;
}
static int perf_evsel__alloc_prev_raw_counts(struct perf_evsel *evsel)
}
static int perf_evsel__alloc_prev_raw_counts(struct perf_evsel *evsel)
static void perf_evsel__free_prev_raw_counts(struct perf_evsel *evsel)
{
static void perf_evsel__free_prev_raw_counts(struct perf_evsel *evsel)
{
- free(evsel->prev_raw_counts);
- evsel->prev_raw_counts = NULL;
+ zfree(&evsel->prev_raw_counts);
}
static void perf_evlist__free_stats(struct perf_evlist *evlist)
}
static void perf_evlist__free_stats(struct perf_evlist *evlist)
* It seems the callchain is corrupted.
* Discard all.
*/
* It seems the callchain is corrupted.
* Discard all.
*/
static void perf_evsel__delete_priv(struct perf_evsel *evsel)
{
static void perf_evsel__delete_priv(struct perf_evsel *evsel)
{
- free(evsel->priv);
- evsel->priv = NULL;
perf_evsel__delete(evsel);
}
perf_evsel__delete(evsel);
}
return -ENOMEM;
out_delete:
return -ENOMEM;
out_delete:
- free(evsel->priv);
- evsel->priv = NULL;
size_t printed = syscall_arg__scnprintf_fd(bf, size, arg);
struct thread_trace *ttrace = arg->thread->priv;
size_t printed = syscall_arg__scnprintf_fd(bf, size, arg);
struct thread_trace *ttrace = arg->thread->priv;
- if (ttrace && fd >= 0 && fd <= ttrace->paths.max) {
- free(ttrace->paths.table[fd]);
- ttrace->paths.table[fd] = NULL;
- }
+ if (ttrace && fd >= 0 && fd <= ttrace->paths.max)
+ zfree(&ttrace->paths.table[fd]);
__ui_browser__show_title(browser, title);
browser->title = title;
__ui_browser__show_title(browser, title);
browser->title = title;
- free(browser->helpline);
- browser->helpline = NULL;
+ zfree(&browser->helpline);
va_start(ap, helpline);
err = vasprintf(&browser->helpline, helpline, ap);
va_start(ap, helpline);
err = vasprintf(&browser->helpline, helpline, ap);
{
pthread_mutex_lock(&ui__lock);
ui_helpline__pop();
{
pthread_mutex_lock(&ui__lock);
ui_helpline__pop();
- free(browser->helpline);
- browser->helpline = NULL;
+ zfree(&browser->helpline);
pthread_mutex_unlock(&ui__lock);
}
pthread_mutex_unlock(&ui__lock);
}
- for (i = 0; i < n; ++i) {
- free(options[i]);
- options[i] = NULL;
- }
+ for (i = 0; i < n; ++i)
+ zfree(&options[i]);
}
/* Check whether the browser is for 'top' or 'report' */
}
/* Check whether the browser is for 'top' or 'report' */
if (!perf_gtk__is_active_context(*ctx))
return -1;
if (!perf_gtk__is_active_context(*ctx))
return -1;
- free(*ctx);
- *ctx = NULL;
src++;
c = cmdline[src];
if (!c) {
src++;
c = cmdline[src];
if (!c) {
- free(*argv);
- *argv = NULL;
return error("cmdline ends with \\");
}
}
return error("cmdline ends with \\");
}
}
cmdline[dst] = 0;
if (quoted) {
cmdline[dst] = 0;
if (quoted) {
- free(*argv);
- *argv = NULL;
return error("unclosed quote");
}
return error("unclosed quote");
}
- free(ops->locked.ops);
- ops->locked.ops = NULL;
+ zfree(&ops->locked.ops);
return 0;
out_free_source:
return 0;
out_free_source:
- free(ops->source.raw);
- ops->source.raw = NULL;
+ zfree(&ops->source.raw);
- free(*namep);
- *namep = NULL;
src_line = (void *)src_line + sizeof_src_line;
}
src_line = (void *)src_line + sizeof_src_line;
}
- free(notes->src->lines);
- notes->src->lines = NULL;
+ zfree(¬es->src->lines);
}
/* Get the filename:line for the colored entries */
}
/* Get the filename:line for the colored entries */
symbols__delete(&dso->symbols[i]);
if (dso->short_name_allocated) {
symbols__delete(&dso->symbols[i]);
if (dso->short_name_allocated) {
- free((char *)dso->short_name);
- dso->short_name = NULL;
+ zfree((char **)&dso->short_name);
dso->short_name_allocated = false;
}
if (dso->long_name_allocated) {
dso->short_name_allocated = false;
}
if (dso->long_name_allocated) {
- free((char *)dso->long_name);
- dso->long_name = NULL;
+ zfree((char **)&dso->long_name);
dso->long_name_allocated = false;
}
dso_cache__free(&dso->cache);
dso__free_a2l(dso);
dso->long_name_allocated = false;
}
dso_cache__free(&dso->cache);
dso__free_a2l(dso);
- free(dso->symsrc_filename);
- dso->symsrc_filename = NULL;
+ zfree(&dso->symsrc_filename);
void perf_evlist__exit(struct perf_evlist *evlist)
{
void perf_evlist__exit(struct perf_evlist *evlist)
{
- free(evlist->mmap);
- free(evlist->pollfd);
- evlist->mmap = NULL;
- evlist->pollfd = NULL;
+ zfree(&evlist->mmap);
+ zfree(&evlist->pollfd);
}
void perf_evlist__delete(struct perf_evlist *evlist)
}
void perf_evlist__delete(struct perf_evlist *evlist)
for (i = 0; i < evlist->nr_mmaps; i++)
__perf_evlist__munmap(evlist, i);
for (i = 0; i < evlist->nr_mmaps; i++)
__perf_evlist__munmap(evlist, i);
- free(evlist->mmap);
- evlist->mmap = NULL;
}
static int perf_evlist__alloc_mmap(struct perf_evlist *evlist)
}
static int perf_evlist__alloc_mmap(struct perf_evlist *evlist)
{
xyarray__delete(evsel->sample_id);
evsel->sample_id = NULL;
{
xyarray__delete(evsel->sample_id);
evsel->sample_id = NULL;
- free(evsel->id);
- evsel->id = NULL;
}
void perf_evsel__close_fd(struct perf_evsel *evsel, int ncpus, int nthreads)
}
void perf_evsel__close_fd(struct perf_evsel *evsel, int ncpus, int nthreads)
evsel->attr.type = PERF_TYPE_SOFTWARE;
evsel->attr.config = PERF_COUNT_SW_CPU_CLOCK;
evsel->attr.type = PERF_TYPE_SOFTWARE;
evsel->attr.config = PERF_COUNT_SW_CPU_CLOCK;
- free(evsel->name);
- evsel->name = NULL;
return events;
error:
if (events)
return events;
error:
if (events)
for (i = 0; i < old->cnt; i++)
cmds->names[cmds->cnt++] = old->names[i];
for (i = 0; i < old->cnt; i++)
cmds->names[cmds->cnt++] = old->names[i];
}
const char *help_unknown_cmd(const char *cmd)
}
const char *help_unknown_cmd(const char *cmd)
map_groups__exit(&machine->kmaps);
dsos__delete(&machine->user_dsos);
dsos__delete(&machine->kernel_dsos);
map_groups__exit(&machine->kmaps);
dsos__delete(&machine->user_dsos);
dsos__delete(&machine->kernel_dsos);
- free(machine->root_dir);
- machine->root_dir = NULL;
+ zfree(&machine->root_dir);
}
void machine__delete(struct machine *machine)
}
void machine__delete(struct machine *machine)
* on one of them.
*/
if (type == MAP__FUNCTION) {
* on one of them.
*/
if (type == MAP__FUNCTION) {
- free((char *)kmap->ref_reloc_sym->name);
- kmap->ref_reloc_sym->name = NULL;
- free(kmap->ref_reloc_sym);
- }
- kmap->ref_reloc_sym = NULL;
+ zfree((char **)&kmap->ref_reloc_sym->name);
+ zfree(&kmap->ref_reloc_sym);
+ } else
+ kmap->ref_reloc_sym = NULL;
}
map__delete(machine->vmlinux_maps[type]);
}
map__delete(machine->vmlinux_maps[type]);
case EFAULT:
raw_path = strchr(++raw_path, '/');
if (!raw_path) {
case EFAULT:
raw_path = strchr(++raw_path, '/');
if (!raw_path) {
- free(*new_path);
- *new_path = NULL;
return -ENOENT;
}
continue;
default:
return -ENOENT;
}
continue;
default:
- free(*new_path);
- *new_path = NULL;
- if (debuginfo__init_offline_dwarf(dbg, path) < 0) {
- free(dbg);
- dbg = NULL;
- }
+ if (debuginfo__init_offline_dwarf(dbg, path) < 0)
+ zfree(&dbg);
- if (debuginfo__init_online_kernel_dwarf(dbg, (Dwarf_Addr)addr) < 0) {
- free(dbg);
- dbg = NULL;
- }
+ if (debuginfo__init_online_kernel_dwarf(dbg, (Dwarf_Addr)addr) < 0)
+ zfree(&dbg);
ret = debuginfo__find_probes(dbg, &tf.pf);
if (ret < 0) {
ret = debuginfo__find_probes(dbg, &tf.pf);
if (ret < 0) {
- free(*tevs);
- *tevs = NULL;
free(af.vls[af.nvls].point.symbol);
strlist__delete(af.vls[af.nvls].vars);
}
free(af.vls[af.nvls].point.symbol);
strlist__delete(af.vls[af.nvls].vars);
}
- free(af.vls);
- *vls = NULL;
if (fname) {
ppt->file = strdup(fname);
if (ppt->file == NULL) {
if (fname) {
ppt->file = strdup(fname);
if (ppt->file == NULL) {
- free(ppt->function);
- ppt->function = NULL;
ret = -ENOMEM;
goto end;
}
ret = -ENOMEM;
goto end;
}
else
ret = 0; /* Lines are not found */
else {
else
ret = 0; /* Lines are not found */
else {
- free(lf->lr->path);
- lf->lr->path = NULL;
static void vmlinux_path__exit(void)
{
static void vmlinux_path__exit(void)
{
- while (--vmlinux_path__nr_entries >= 0) {
- free(vmlinux_path[vmlinux_path__nr_entries]);
- vmlinux_path[vmlinux_path__nr_entries] = NULL;
- }
+ while (--vmlinux_path__nr_entries >= 0)
+ zfree(&vmlinux_path[vmlinux_path__nr_entries]);
- free(vmlinux_path);
- vmlinux_path = NULL;
}
static int vmlinux_path__init(void)
}
static int vmlinux_path__init(void)
#include "strlist.h"
#include <string.h>
#include "thread_map.h"
#include "strlist.h"
#include <string.h>
#include "thread_map.h"
/* Skip "." and ".." directories */
static int filter(const struct dirent *dir)
/* Skip "." and ".." directories */
static int filter(const struct dirent *dir)
free(namelist);
out_free_closedir:
free(namelist);
out_free_closedir:
- free(threads);
- threads = NULL;
free(namelist);
out_free_threads:
free(namelist);
out_free_threads:
- free(threads);
- threads = NULL;
return threads;
out_free_threads:
return threads;
out_free_threads:
- free(threads);
- threads = NULL;
- if (err) {
- free(tdata);
- tdata = NULL;
- }
+ if (err)
+ zfree(&tdata);
put_tracepoints_path(tps);
return tdata;
put_tracepoints_path(tps);
return tdata;
return calloc(1, size);
}
return calloc(1, size);
}
+#define zfree(ptr) ({ free(*ptr); *ptr = NULL; })
+
static inline int has_extension(const char *filename, const char *ext)
{
size_t len = strlen(filename);
static inline int has_extension(const char *filename, const char *ext)
{
size_t len = strlen(filename);