diff --git a/src/DownloadEngine.cc b/src/DownloadEngine.cc index 111009bd..a79702d0 100644 --- a/src/DownloadEngine.cc +++ b/src/DownloadEngine.cc @@ -150,14 +150,22 @@ void executeCommand(std::deque>& commands, namespace { class GlobalHaltRequestedFinalizer { public: - GlobalHaltRequestedFinalizer() = default; - ~GlobalHaltRequestedFinalizer() { global::globalHaltRequested = 5; } + GlobalHaltRequestedFinalizer(bool oneshot) : oneshot_(oneshot) {} + ~GlobalHaltRequestedFinalizer() + { + if (!oneshot_) { + global::globalHaltRequested = 5; + } + } + +private: + bool oneshot_; }; } // namespace int DownloadEngine::run(bool oneshot) { - GlobalHaltRequestedFinalizer ghrf; + GlobalHaltRequestedFinalizer ghrf(oneshot); while (!commands_.empty() || !routineCommands_.empty()) { if (!commands_.empty()) { waitData();