diff --git a/libdaggy/src/executors/task/ForkingTaskExecutor.cpp b/libdaggy/src/executors/task/ForkingTaskExecutor.cpp index 469693b..6a403a1 100644 --- a/libdaggy/src/executors/task/ForkingTaskExecutor.cpp +++ b/libdaggy/src/executors/task/ForkingTaskExecutor.cpp @@ -95,9 +95,10 @@ TaskFuture ForkingTaskExecutor::execute(DAGRunID runID, const Task &task) { std::string key = std::to_string(runID) + "_" + taskName; - std::lock_guard lock(taskControlsGuard_); + std::unique_lock lock(taskControlsGuard_); auto [it, ins] = taskControls_.emplace(key, true); - auto &running = it->second; + lock.unlock(); + auto &running = it->second; return tp_.addTask([this, task, taskName, &running, key]() { auto ret = this->runTask(task, running); std::lock_guard lock(this->taskControlsGuard_);