소스 검색

Fixing a deadlock when going through function starpu_sched_ctx_move_task_to_ctx

Terry Cojean 10 년 전
부모
커밋
23ac963803
2개의 변경된 파일1개의 추가작업 그리고 12개의 파일을 삭제
  1. 0 11
      src/core/sched_ctx.c
  2. 1 1
      src/sched_policies/heteroprio.c

+ 0 - 11
src/core/sched_ctx.c

@@ -1973,14 +1973,6 @@ void starpu_sched_ctx_revert_task_counters(unsigned sched_ctx_id, double ready_f
 
 void starpu_sched_ctx_move_task_to_ctx(struct starpu_task *task, unsigned sched_ctx)
 {
-	int workerid = starpu_worker_get_id();
-	struct _starpu_worker *worker  = NULL;
-	if(workerid != -1)
-	{
-		worker = _starpu_get_worker_struct(workerid);
-		STARPU_PTHREAD_MUTEX_UNLOCK(&worker->sched_mutex);
-	}
-
 	task->sched_ctx = sched_ctx;
 
 	struct _starpu_job *j = _starpu_get_job_associated_to_task(task);
@@ -1988,9 +1980,6 @@ void starpu_sched_ctx_move_task_to_ctx(struct starpu_task *task, unsigned sched_
 	_starpu_increment_nsubmitted_tasks_of_sched_ctx(j->task->sched_ctx);
 
 	_starpu_repush_task(j);
-
-	if(workerid != -1)
-		STARPU_PTHREAD_MUTEX_LOCK(&worker->sched_mutex);
 }
 
 static unsigned _worker_sleeping_in_other_ctx(unsigned sched_ctx_id, int workerid)

+ 1 - 1
src/sched_policies/heteroprio.c

@@ -585,7 +585,6 @@ static struct starpu_task *pop_task_heteroprio_policy(unsigned sched_ctx_id)
 		starpu_bitmap_set(hp->waiters, workerid);
 	}
 	STARPU_PTHREAD_MUTEX_UNLOCK(&hp->policy_mutex);
-	STARPU_PTHREAD_MUTEX_LOCK(worker_sched_mutex);
 
 	if(task)
 	{
@@ -598,6 +597,7 @@ static struct starpu_task *pop_task_heteroprio_policy(unsigned sched_ctx_id)
 		}
 	}
 
+	STARPU_PTHREAD_MUTEX_LOCK(worker_sched_mutex);
 	/* if we have task (task) me way have some in the queue (worker->tasks_queue_size) that was freshly addeed (nb_added_tasks) */
 	if(task && worker->tasks_queue->ntasks && nb_added_tasks && starpu_get_prefetch_flag())
 	{