mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 09:36:25 +00:00 
			
		
		
		
	perf evsel: Delete the event selectors at exit
Freeing all the possibly allocated resources, reducing complexity on each tool exit path. Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Cc: Tom Zanussi <tzanussi@gmail.com> LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									1e7972cc5c
								
							
						
					
					
						commit
						70d544d057
					
				| @ -965,8 +965,6 @@ int cmd_record(int argc, const char **argv, const char *prefix __used) | ||||
| out_free_event_array: | ||||
| 	free(event_array); | ||||
| out_free_fd: | ||||
| 	list_for_each_entry(pos, &evsel_list, node) | ||||
| 		perf_evsel__free_fd(pos); | ||||
| 	free(all_tids); | ||||
| 	all_tids = NULL; | ||||
| out_symbol_exit: | ||||
|  | ||||
| @ -844,10 +844,8 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) | ||||
| 	if (status != -1) | ||||
| 		print_stat(argc, argv); | ||||
| out_free_fd: | ||||
| 	list_for_each_entry(pos, &evsel_list, node) { | ||||
| 		perf_evsel__free_fd(pos); | ||||
| 	list_for_each_entry(pos, &evsel_list, node) | ||||
| 		perf_evsel__free_stat_priv(pos); | ||||
| 	} | ||||
| out: | ||||
| 	return status; | ||||
| } | ||||
|  | ||||
| @ -1495,10 +1495,8 @@ int cmd_top(int argc, const char **argv, const char *prefix __used) | ||||
| 
 | ||||
| 	status = __cmd_top(); | ||||
| out_free_fd: | ||||
| 	list_for_each_entry(pos, &evsel_list, node) { | ||||
| 		perf_evsel__free_fd(pos); | ||||
| 	list_for_each_entry(pos, &evsel_list, node) | ||||
| 		perf_evsel__free_mmap(pos); | ||||
| 	} | ||||
| 
 | ||||
| 	return status; | ||||
| } | ||||
|  | ||||
| @ -286,6 +286,8 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv) | ||||
| 	status = p->fn(argc, argv, prefix); | ||||
| 	exit_browser(status); | ||||
| 
 | ||||
| 	perf_evsel_list__delete(); | ||||
| 
 | ||||
| 	if (status) | ||||
| 		return status & 0xff; | ||||
| 
 | ||||
|  | ||||
| @ -982,3 +982,14 @@ int perf_evsel_list__create_default(void) | ||||
| 	++nr_counters; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| void perf_evsel_list__delete(void) | ||||
| { | ||||
| 	struct perf_evsel *pos, *n; | ||||
| 
 | ||||
| 	list_for_each_entry_safe(pos, n, &evsel_list, node) { | ||||
| 		list_del_init(&pos->node); | ||||
| 		perf_evsel__delete(pos); | ||||
| 	} | ||||
| 	nr_counters = 0; | ||||
| } | ||||
|  | ||||
| @ -12,6 +12,7 @@ struct perf_evsel; | ||||
| extern struct list_head evsel_list; | ||||
| 
 | ||||
| int perf_evsel_list__create_default(void); | ||||
| void perf_evsel_list__delete(void); | ||||
| 
 | ||||
| struct option; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Arnaldo Carvalho de Melo
						Arnaldo Carvalho de Melo