From ab7be5a6c9bba9c1a139d9d390987a3c45f0a09f Mon Sep 17 00:00:00 2001 From: Oliver Giles Date: Sun, 9 Sep 2018 12:15:23 +0300 Subject: [PATCH] resolves #52: timeout prevents .after script Mark .after scripts as executing even after a timeout abort --- src/laminar.cpp | 10 +++++----- src/run.cpp | 10 +++++----- src/run.h | 7 ++++--- test/test-run.cpp | 4 ++-- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/laminar.cpp b/src/laminar.cpp index fb5e229..2a42f24 100644 --- a/src/laminar.cpp +++ b/src/laminar.cpp @@ -587,7 +587,7 @@ void Laminar::notifyConfigChanged() void Laminar::abortAll() { for(std::shared_ptr run : activeJobs) { - run->abort(); + run->abort(false); } } @@ -674,13 +674,13 @@ bool Laminar::tryStartRun(std::shared_ptr run, int queueIndex) { run->addScript((cfgDir/"jobs"/run->name+".run").string()); // job after-run script if(fs::exists(cfgDir/"jobs"/run->name+".after")) - run->addScript((cfgDir/"jobs"/run->name+".after").string()); + run->addScript((cfgDir/"jobs"/run->name+".after").string(), true); // per-node after-run script if(fs::exists(cfgDir/"nodes"/node->name+".after")) - run->addScript((cfgDir/"nodes"/node->name+".after").string()); + run->addScript((cfgDir/"nodes"/node->name+".after").string(), true); // global after-run script if(fs::exists(cfgDir/"after")) - run->addScript((cfgDir/"after").string()); + run->addScript((cfgDir/"after").string(), true); // add environment files if(fs::exists(cfgDir/"env")) @@ -699,7 +699,7 @@ bool Laminar::tryStartRun(std::shared_ptr run, int queueIndex) { // will be cancelled and the callback never called. Run* r = run.get(); r->timeout = srv->addTimeout(timeout, [r](){ - r->abort(); + r->abort(true); }); } } diff --git a/src/run.cpp b/src/run.cpp index 3b3186f..9f84a2f 100644 --- a/src/run.cpp +++ b/src/run.cpp @@ -128,17 +128,17 @@ bool Run::step() { return false; } -void Run::addScript(std::string scriptPath, std::string scriptWorkingDir) { - scripts.push({scriptPath, scriptWorkingDir}); +void Run::addScript(std::string scriptPath, std::string scriptWorkingDir, bool runOnAbort) { + scripts.push({scriptPath, scriptWorkingDir, runOnAbort}); } void Run::addEnv(std::string path) { env.push_back(path); } -void Run::abort() { - // clear all pending scripts - std::queue