ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Spectre2/Spectre2.cpp
(Generate patch)

Comparing Spectre2/Spectre2.cpp (file contents):
Revision 402 by douglas, 2004-12-29T22:38:37-08:00 vs.
Revision 406 by douglas, 2004-12-30T22:08:35-08:00

# Line 4 | Line 4
4   //
5   // $Id$
6  
7 #include "SignalHandler.hpp"
7   #include "Mounter.hpp"
8   #include "Unmounter.hpp"
9   #include "Matcher/Matcher.hpp"
# Line 17 | Line 16 | extern "C"
16   {
17   #include <sys/types.h>
18   #include <unistd.h>
19 + #include <signal.h>
20   }
21  
22   struct Spectre2Command : public app::Application
# Line 50 | Line 50 | struct Spectre2Command : public app::App
50          }
51   } spectre;
52  
53 + extern "C"
54 + {
55 +        void reload(int signal, ::siginfo_t* info, void* uap);
56 +        void stop(int signal, ::siginfo_t* info, void* uap);
57 + }
58 +
59   Spectre2::Spectre2(const ext::String& config, const ext::String& pid) : pid(pid)
60   {
61          {
# Line 61 | Line 67 | Spectre2::Spectre2(const ext::String& co
67  
68          Mounter mounter(config);
69          Unmounter unmounter(config);
70 <        Daemon* daemons[] = { static_cast<Daemon*>(&mounter), static_cast<Daemon*>(&unmounter) };
71 <        SignalHandler handler(daemons, sizeof (daemons) / sizeof (*daemons));
70 >
71 >        daemons.InsertLast(dynamic_cast<Daemon*>(&mounter));
72 >        daemons.InsertLast(dynamic_cast<Daemon*>(&unmounter));
73 >
74 >        {
75 >                struct ::sigaction action;
76 >
77 >                action.sa_sigaction = reload;
78 >                action.sa_flags = SA_SIGINFO;
79 >
80 >                api::Posix::CheckError(::sigemptyset(&action.sa_mask));
81 >                api::Posix::CheckError(::sigaction(SIGHUP, &action, NULL));
82 >
83 >                action.sa_sigaction = stop;
84 >
85 >                api::Posix::CheckError(::sigaction(SIGTERM, &action, NULL));
86 >        }
87 >
88 >        _mforeach (ext::Vector<Daemon*>, daemon, daemons) (*daemon)->start();
89   }
90  
91   Spectre2::~Spectre2()
# Line 72 | Line 95 | Spectre2::~Spectre2()
95  
96   ext::String Spectre2::program(api::GetExecutablePath().GetName());
97   bool Spectre2::debug(false);
98 + ext::Vector<Daemon*> Spectre2::daemons;
99 +
100 + extern "C"
101 + {
102 +        void reload(int signal, ::siginfo_t* info, void* uap)
103 +        {
104 +                _mforeach (ext::Vector<Daemon*>, daemon, Spectre2::daemons) (*daemon)->reload();
105 +        }
106 +
107 +        void stop(int signal, ::siginfo_t* info, void* uap)
108 +        {
109 +                _mforeach (ext::Vector<Daemon*>, daemon, Spectre2::daemons) (*daemon)->stop();
110 +        }
111 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines