fix exit core dump

pull/6287/head
kswang 5 years ago
parent 5ffec7efaf
commit c7ecc106dd

@ -91,6 +91,8 @@ Executor::Executor(const std::string &device_name, uint32_t device_id) {
worker_ = std::make_shared<std::thread>(&Executor::WorkerLoop, this); worker_ = std::make_shared<std::thread>(&Executor::WorkerLoop, this);
} }
Executor::~Executor() { WorkerJoin(); }
void Executor::CheckException() { void Executor::CheckException() {
if (exception_ptr_ != nullptr) { if (exception_ptr_ != nullptr) {
auto exception_ptr = exception_ptr_; auto exception_ptr = exception_ptr_;
@ -100,8 +102,15 @@ void Executor::CheckException() {
} }
void Executor::WorkerJoin() { void Executor::WorkerJoin() {
StopWorker(); if (worker_->joinable()) {
worker_->join(); {
std::unique_lock<std::mutex> lock(task_mutex_);
auto task = std::make_shared<ExitTask>();
ready_tasks_.push(task);
task_cond_var_.notify_all();
}
worker_->join();
}
} }
void Executor::WorkerLoop() { void Executor::WorkerLoop() {
@ -282,13 +291,6 @@ bool Executor::DestroyCommGroup(const std::string &group_name) {
return task->result_; return task->result_;
} }
void Executor::StopWorker() {
std::unique_lock<std::mutex> lock(task_mutex_);
auto task = std::make_shared<ExitTask>();
ready_tasks_.push(task);
task_cond_var_.notify_all();
}
void Executor::OnWorkerExit() { void Executor::OnWorkerExit() {
if (device_name_ == kAscendDevice) { if (device_name_ == kAscendDevice) {
device::KernelRuntimeManager::Instance().ReleaseKernelRuntime(kAscendDevice, device_id_); device::KernelRuntimeManager::Instance().ReleaseKernelRuntime(kAscendDevice, device_id_);

@ -146,7 +146,7 @@ class ExitTask : public Task {
class Executor { class Executor {
public: public:
Executor(const std::string &device_name, uint32_t device_id); Executor(const std::string &device_name, uint32_t device_id);
~Executor() = default; ~Executor();
void WorkerLoop(); void WorkerLoop();
void WorkerJoin(); void WorkerJoin();
GraphId CompileGraphAsync(const SessionPtr &session, const AnfNodePtrList &lst, const AnfNodePtrList &outputs); GraphId CompileGraphAsync(const SessionPtr &session, const AnfNodePtrList &lst, const AnfNodePtrList &outputs);
@ -168,7 +168,6 @@ class Executor {
std::vector<std::shared_ptr<RunGraphTask>> GetNewReadyTasks(); std::vector<std::shared_ptr<RunGraphTask>> GetNewReadyTasks();
bool IsAllInputsReady(const std::vector<tensor::TensorPtr> &inputs); bool IsAllInputsReady(const std::vector<tensor::TensorPtr> &inputs);
void CheckException(); void CheckException();
void StopWorker();
void OnWorkerExit(); void OnWorkerExit();
uint32_t device_id_; uint32_t device_id_;

Loading…
Cancel
Save