ソースを参照

Merge pull request #1053 from aria2/fix-libaria2-signal-handler

Fix bug that signal handler does not work with libaria2
Tatsuhiro Tsujikawa 8 年 前
コミット
d508e41198
1 ファイル変更11 行追加3 行削除
  1. 11 3
      src/DownloadEngine.cc

+ 11 - 3
src/DownloadEngine.cc

@@ -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();