diff --git a/mindspore/ccsrc/backend/session/executor.cc b/mindspore/ccsrc/backend/session/executor.cc index cee2c15907..bd262f4758 100644 --- a/mindspore/ccsrc/backend/session/executor.cc +++ b/mindspore/ccsrc/backend/session/executor.cc @@ -336,7 +336,7 @@ void Executor::RunGraph(const SessionPtr &session, const GraphId &graph_id, RunTask(task, true, true); } -void Executor::WaitTaskGraphAvailable(const SessionPtr &session, const std::shared_ptr &task) { +void Executor::WaitLockedInputs(const SessionPtr &session, const std::shared_ptr &task) { bool need_lock = false; for (auto &tensor : task->input_tensors_) { if (tensor->NeedWait()) { @@ -388,11 +388,13 @@ void Executor::RunGraphAsync(const SessionPtr &session, const GraphId &graph_id, RunTask(task, true, true); return; } - WaitTaskGraphAvailable(session, task); - if (!IsTaskReady(task)) { + WaitLockedInputs(session, task); + { std::lock_guard lock(pending_task_mutex_); - pending_tasks_.push_back(task); - return; + if (!IsTaskReady(task)) { + pending_tasks_.push_back(task); + return; + } } RunTask(task, false); } diff --git a/mindspore/ccsrc/backend/session/executor.h b/mindspore/ccsrc/backend/session/executor.h index 978e0a2ef6..4e323a99ef 100644 --- a/mindspore/ccsrc/backend/session/executor.h +++ b/mindspore/ccsrc/backend/session/executor.h @@ -174,7 +174,7 @@ class Executor { void RunTask(const std::shared_ptr &task, bool sync, bool long_run = false); std::vector> GetNewReadyTasks(); bool IsTaskReady(const std::shared_ptr &task); - void WaitTaskGraphAvailable(const SessionPtr &session, const std::shared_ptr &task); + void WaitLockedInputs(const SessionPtr &session, const std::shared_ptr &task); void OnWorkerExit(); void OnRunGraphFinished(); void OnException();