From 9ff4046aaacbe8b4fbaff88bc8dc6a16a24af487 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Mon, 30 Sep 2013 14:26:02 +0400 Subject: [PATCH] [IMPROVE] add spinlock proc_lock to sync with on_each_proc() Change-Id: I94a6fa84b7661056294e9d4da1a43117a72587e7 Signed-off-by: Vyacheslav Cherkashin --- us_manager/sspt/sspt_proc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/us_manager/sspt/sspt_proc.c b/us_manager/sspt/sspt_proc.c index 2207805..fe08406 100644 --- a/us_manager/sspt/sspt_proc.c +++ b/us_manager/sspt/sspt_proc.c @@ -56,6 +56,7 @@ } static LIST_HEAD(proc_probes_list); +static DEFINE_SPINLOCK(proc_lock); struct sspt_proc *sspt_proc_create(struct task_struct *task, void *priv) { @@ -87,7 +88,9 @@ void sspt_proc_free(struct sspt_proc *proc) struct sspt_file *file, *n; /* delete from list */ + spin_lock(&proc_lock); list_del(&proc->list); + spin_unlock(&proc_lock); list_for_each_entry_safe(file, n, &proc->file_list, list) { list_del(&file->list); @@ -116,9 +119,11 @@ void on_each_proc(void (*func)(struct sspt_proc *, void *), void *data) { struct sspt_proc *proc, *tmp; + spin_lock(&proc_lock); list_for_each_entry_safe(proc, tmp, &proc_probes_list, list) { func(proc, data); } + spin_unlock(&proc_lock); } struct sspt_proc *sspt_proc_get_by_task_or_new(struct task_struct *task, -- 2.7.4