Просмотр исходного кода

src/core/jobs.c: fix #10642, the worker is not always defined

Nathalie Furmento лет назад: 12
Родитель
Сommit
cdc7897dc4
1 измененных файлов с 9 добавлено и 7 удалено
  1. 9 7
      src/core/jobs.c

+ 9 - 7
src/core/jobs.c

@@ -297,15 +297,17 @@ void _starpu_handle_job_termination(struct _starpu_job *j)
 
 	struct _starpu_worker *worker;
 	worker = _starpu_get_local_worker_key();
-	STARPU_ASSERT(worker);
-	STARPU_PTHREAD_MUTEX_LOCK(&worker->sched_mutex);
-
-	if(worker->removed_from_ctx[sched_ctx] == 1 && worker->shares_tasks_lists[sched_ctx] == 1)
+	if (worker)
 	{
-		_starpu_worker_gets_out_of_ctx(sched_ctx, worker);
-		worker->removed_from_ctx[sched_ctx] = 0;
+		STARPU_PTHREAD_MUTEX_LOCK(&worker->sched_mutex);
+
+		if(worker->removed_from_ctx[sched_ctx] == 1 && worker->shares_tasks_lists[sched_ctx] == 1)
+		{
+			_starpu_worker_gets_out_of_ctx(sched_ctx, worker);
+			worker->removed_from_ctx[sched_ctx] = 0;
+		}
+		STARPU_PTHREAD_MUTEX_UNLOCK(&worker->sched_mutex);
 	}
-	STARPU_PTHREAD_MUTEX_UNLOCK(&worker->sched_mutex);
 }
 
 /* This function is called when a new task is submitted to StarPU