From 51b919f04e646e2a086644ff62af018ac1a7274e Mon Sep 17 00:00:00 2001 From: FritzFlorian Date: Wed, 12 Jun 2019 14:09:15 +0200 Subject: [PATCH] Fix issue when re-using the main-thread and terminating the scheduler --- lib/pls/include/pls/internal/data_structures/locking_deque.h | 2 +- lib/pls/src/internal/scheduling/scheduler.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/pls/include/pls/internal/data_structures/locking_deque.h b/lib/pls/include/pls/internal/data_structures/locking_deque.h index 0c2a253..a5e53fb 100644 --- a/lib/pls/include/pls/internal/data_structures/locking_deque.h +++ b/lib/pls/include/pls/internal/data_structures/locking_deque.h @@ -58,7 +58,7 @@ class locking_deque { "Must only push types of onto work_stealing_deque"); std::lock_guard lock{lock_}; - auto deque_item = stack_->push(locking_deque_container{new_item}); + auto deque_item = stack_->push>(new_item); deque_item->item_ = &deque_item->content_; if (tail_ != nullptr) { diff --git a/lib/pls/src/internal/scheduling/scheduler.cpp b/lib/pls/src/internal/scheduling/scheduler.cpp index 3b91f0e..8adf8ea 100644 --- a/lib/pls/src/internal/scheduling/scheduler.cpp +++ b/lib/pls/src/internal/scheduling/scheduler.cpp @@ -81,6 +81,9 @@ void scheduler::terminate(bool wait_for_workers) { if (wait_for_workers) { for (unsigned int i = 0; i < num_threads_; i++) { + if (reuse_thread_ && i == 0) { + continue; + } memory_->thread_for(i)->join(); } } -- libgit2 0.26.0