Use shared ptr for sigaction 58/320758/3
authorHwankyu Jhun <h.jhun@samsung.com>
Fri, 22 Nov 2024 04:06:04 +0000 (13:06 +0900)
committerHwanKyu Jhun <h.jhun@samsung.com>
Mon, 25 Nov 2024 02:21:07 +0000 (02:21 +0000)
To decrease parameter size of the constructor of the SignalAction,
this patch uses shared_ptr instead of raw data.

Change-Id: I92946f89494253f48ffd378d1859ddad70c2e0cf
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/launchpad-process-pool/signal_manager.cc
src/launchpad-process-pool/signal_manager.hh

index a767c40e14ac77f15c1b8fe7ff8846d0cfa84587..12fc88f2d7a3f73a0a2507d1ce33b9640215e3d2 100644 (file)
@@ -207,7 +207,8 @@ void SignalManager::ChangeSignalAction(int signo) {
     return;
   }
 
-  sigaction_map_[signo] = std::make_unique<SignalAction>(signo, old_action);
+  sigaction_map_[signo] = std::make_unique<SignalAction>(
+      signo, std::make_shared<struct sigaction>(old_action));
 }
 
 void SignalManager::RestoreSignalAction(int signo) {
@@ -219,7 +220,7 @@ void SignalManager::RestoreSignalAction(int signo) {
 
   auto& signal_action = found->second;
   auto old_action = signal_action->GetSigaction();
-  sigaction(signo, &old_action, nullptr);
+  sigaction(signo, old_action.get(), nullptr);
   sigaction_map_.erase(found);
 }
 
index d3b21668141e70802b87a2a6872878dec7bcbfb5..78c64c0c3d8262710171d7c49b1ffa65c40292cf 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <memory>
 #include <unordered_map>
+#include <utility>
 
 #include <client_socket.hh>
 #include <io_channel.hh>
@@ -56,18 +57,18 @@ class SignalManager : public SigchldEvent::IEvent,
  private:
   class SignalAction {
    public:
-    SignalAction(int signo, struct sigaction action)
-        : signo_(signo), action_(action) {}
+    SignalAction(int signo, std::shared_ptr<struct sigaction> action)
+        : signo_(signo), action_(std::move(action)) {}
 
     int GetSigno() const { return signo_; }
 
-    struct sigaction GetSigaction() const {
+    std::shared_ptr<struct sigaction> GetSigaction() const {
       return action_;
     }
 
    private:
     int signo_;
-    struct sigaction action_;
+    std::shared_ptr<struct sigaction> action_;
   };
 
   SignalManager() = default;