summaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2011-12-09 02:21:43 +0000
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2011-12-09 02:21:43 +0000
commitce9ff32cc628753b0112022b97bbdc4efe453b9e (patch)
tree34b694493aa13f6544581b57928cb2b0a952d54a /libgomp
parentadb6e76b38b612dc7baaff87a78cd0ae40d8798c (diff)
downloadgcc-ce9ff32cc628753b0112022b97bbdc4efe453b9e.tar.gz
PR libgomp/51376
* task.c (GOMP_taskwait): Don't access task->children outside of task_lock mutex region. (GOMP_task): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182151 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgomp')
-rw-r--r--libgomp/ChangeLog7
-rw-r--r--libgomp/task.c8
2 files changed, 12 insertions, 3 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index cf3f0043026..6af961d93b0 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,10 @@
+2011-12-09 Alan Modra <amodra@gmail.com>
+
+ PR libgomp/51376
+ * task.c (GOMP_taskwait): Don't access task->children outside of
+ task_lock mutex region.
+ (GOMP_task): Likewise.
+
2011-12-06 Jakub Jelinek <jakub@redhat.com>
PR libgomp/51132
diff --git a/libgomp/task.c b/libgomp/task.c
index d3d72663f35..4b75850072b 100644
--- a/libgomp/task.c
+++ b/libgomp/task.c
@@ -116,10 +116,11 @@ GOMP_task (void (*fn) (void *), void *data, void (*cpyfn) (void *, void *),
}
else
fn (data);
- if (task.children)
+ if (team != NULL)
{
gomp_mutex_lock (&team->task_lock);
- gomp_clear_parent (task.children);
+ if (task.children != NULL)
+ gomp_clear_parent (task.children);
gomp_mutex_unlock (&team->task_lock);
}
gomp_end_task ();
@@ -290,8 +291,9 @@ GOMP_taskwait (void)
struct gomp_task *child_task = NULL;
struct gomp_task *to_free = NULL;
- if (task == NULL || task->children == NULL)
+ if (task == NULL || team == NULL)
return;
+
gomp_mutex_lock (&team->task_lock);
while (1)
{