OSDN Git Service

PR libgomp/51376
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Dec 2011 02:21:43 +0000 (02:21 +0000)
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Dec 2011 02:21:43 +0000 (02:21 +0000)
* 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

libgomp/ChangeLog
libgomp/task.c

index cf3f004..6af961d 100644 (file)
@@ -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
index d3d7266..4b75850 100644 (file)
@@ -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)
     {