Explorar o código

fix memory leak: only really parallel tasks get freed

Samuel Thibault %!s(int64=8) %!d(string=hai) anos
pai
achega
2b6e2c26e5
Modificáronse 1 ficheiros con 8 adicións e 2 borrados
  1. 8 2
      src/core/sched_policy.c

+ 8 - 2
src/core/sched_policy.c

@@ -571,8 +571,14 @@ int _starpu_push_task_to_workers(struct starpu_task *task)
 				while(workers->has_next(workers, &it))
 				{
 					unsigned workerid = workers->get_next(workers, &it);
-					struct starpu_task *alias = starpu_task_dup(task);
-					alias->destroy = 1;
+					struct starpu_task *alias;
+					if (job->task_size > 1)
+					{
+						alias = starpu_task_dup(task);
+						alias->destroy = 1;
+					}
+					else
+						alias = task;
 					ret |= _starpu_push_task_on_specific_worker(alias, workerid);
 				}
 			}