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().
This commit is contained in:
Tatsuhiro Tsujikawa 2017-10-31 23:04:37 +09:00
parent 450b4f467f
commit 85b102a2a0

View File

@ -150,14 +150,22 @@ void executeCommand(std::deque<std::unique_ptr<Command>>& 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();