Commit 4bcf349a authored by Paul Mackerras's avatar Paul Mackerras Committed by Ingo Molnar
Browse files

perfcounters: fix refcounting bug, take 2



Only free child_counter if it has a parent; if it doesn't, then it
has a file pointing to it and we'll free it in perf_release.

Signed-off-by: default avatarMike Galbraith <efault@gmx.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 5af75917
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -1958,15 +1958,14 @@ __perf_counter_exit_task(struct task_struct *child,
		sync_child_counter(child_counter, parent_counter);
		list_for_each_entry_safe(sub, tmp, &child_counter->sibling_list,
					 list_entry) {
			if (sub->parent)
			if (sub->parent) {
				sync_child_counter(sub, sub->parent);
				kfree(sub);
			}
		}

	if (!child_counter->filp || !atomic_long_read(&child_counter->filp->f_count))
		kfree(child_counter);
	}
}

/*
 * When a child task exits, feed back counter values to parent counters.