Forráskód Böngészése

- fix cleanup callback with respect to accelerator tasks

Olivier Aumage 10 éve
szülő
commit
9a4e09e17e
1 módosított fájl, 11 hozzáadás és 10 törlés
  1. 11 10
      src/util/openmp_runtime_support.c

+ 11 - 10
src/util/openmp_runtime_support.c

@@ -1548,18 +1548,19 @@ static void explicit_task__destroy_callback(void *_task)
 	task->starpu_task->omp_task = NULL;
 	task->starpu_task = NULL;
 	_starpu_spin_lock(&task->lock);
-	STARPU_ASSERT(task->transaction_pending == 1);
-	task->transaction_pending = 0;
-	if (task->child_task_count != 0)
-	{
-		task->state = starpu_omp_task_state_zombie;
-		_starpu_spin_unlock(&task->lock);
-	}
-	else
+	if (task->state != starpu_omp_task_state_target)
 	{
-		_starpu_spin_unlock(&task->lock);
-		destroy_omp_task_struct(task);
+		STARPU_ASSERT(task->transaction_pending == 1);
+		task->transaction_pending = 0;
+		if (task->child_task_count != 0)
+		{
+			task->state = starpu_omp_task_state_zombie;
+			_starpu_spin_unlock(&task->lock);
+			return;
+		}
 	}
+	_starpu_spin_unlock(&task->lock);
+	destroy_omp_task_struct(task);
 }
 
 void starpu_omp_task_region(const struct starpu_omp_task_region_attr *attr)