Fix bug that signal handler does not work with libaria2

This commit fixes the bug that signal handler does not work with
libaria2 when aria2::RUN_ONCE is passed to aria2::run().
pull/1053/head
Tatsuhiro Tsujikawa 2017-10-31 23:04:37 +09:00
parent 450b4f467f
commit 85b102a2a0
1 changed files with 11 additions and 3 deletions

View File

@ -150,14 +150,22 @@ void executeCommand(std::deque<std::unique_ptr<Command>>& commands,
namespace { namespace {
class GlobalHaltRequestedFinalizer { class GlobalHaltRequestedFinalizer {
public: public:
GlobalHaltRequestedFinalizer() = default; GlobalHaltRequestedFinalizer(bool oneshot) : oneshot_(oneshot) {}
~GlobalHaltRequestedFinalizer() { global::globalHaltRequested = 5; } ~GlobalHaltRequestedFinalizer()
{
if (!oneshot_) {
global::globalHaltRequested = 5;
}
}
private:
bool oneshot_;
}; };
} // namespace } // namespace
int DownloadEngine::run(bool oneshot) int DownloadEngine::run(bool oneshot)
{ {
GlobalHaltRequestedFinalizer ghrf; GlobalHaltRequestedFinalizer ghrf(oneshot);
while (!commands_.empty() || !routineCommands_.empty()) { while (!commands_.empty() || !routineCommands_.empty()) {
if (!commands_.empty()) { if (!commands_.empty()) {
waitData(); waitData();