projects
/
project
/
procd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add ifdefs to make system.c compile on non-linux systems
[project/procd.git]
/
signal.c
diff --git
a/signal.c
b/signal.c
index
a4b08c3
..
16824f7
100644
(file)
--- a/
signal.c
+++ b/
signal.c
@@
-19,12
+19,24
@@
#include "procd.h"
#include "procd.h"
+static void do_reboot(void)
+{
+ LOG("reboot\n");
+ fflush(stderr);
+ sync();
+ sleep(2);
+ reboot(RB_AUTOBOOT);
+ while (1)
+ ;
+}
+
static void signal_shutdown(int signal, siginfo_t *siginfo, void *data)
{
int event = 0;
char *msg = NULL;
switch(signal) {
static void signal_shutdown(int signal, siginfo_t *siginfo, void *data)
{
int event = 0;
char *msg = NULL;
switch(signal) {
+ case SIGINT:
case SIGTERM:
event = RB_AUTOBOOT;
msg = "reboot";
case SIGTERM:
event = RB_AUTOBOOT;
msg = "reboot";
@@
-49,12
+61,7
@@
struct sigaction sa_shutdown = {
static void signal_crash(int signal, siginfo_t *siginfo, void *data)
{
ERROR("Rebooting as procd has crashed\n");
static void signal_crash(int signal, siginfo_t *siginfo, void *data)
{
ERROR("Rebooting as procd has crashed\n");
- fflush(stderr);
- sync();
- sleep(1);
- reboot(RB_AUTOBOOT);
- while (1)
- ;
+ do_reboot();
}
struct sigaction sa_crash = {
}
struct sigaction sa_crash = {
@@
-74,10
+81,11
@@
struct sigaction sa_dummy = {
void procd_signal(void)
{
void procd_signal(void)
{
- sig
action(SIGPIPE, &sa_dummy, NULL
);
+ sig
nal(SIGPIPE, SIG_IGN
);
if (getpid() != 1)
return;
sigaction(SIGTERM, &sa_shutdown, NULL);
if (getpid() != 1)
return;
sigaction(SIGTERM, &sa_shutdown, NULL);
+ sigaction(SIGINT, &sa_shutdown, NULL);
sigaction(SIGUSR1, &sa_shutdown, NULL);
sigaction(SIGUSR2, &sa_shutdown, NULL);
sigaction(SIGSEGV, &sa_crash, NULL);
sigaction(SIGUSR1, &sa_shutdown, NULL);
sigaction(SIGUSR2, &sa_shutdown, NULL);
sigaction(SIGSEGV, &sa_crash, NULL);
@@
-85,4
+93,5
@@
void procd_signal(void)
sigaction(SIGHUP, &sa_dummy, NULL);
sigaction(SIGKILL, &sa_dummy, NULL);
sigaction(SIGSTOP, &sa_dummy, NULL);
sigaction(SIGHUP, &sa_dummy, NULL);
sigaction(SIGKILL, &sa_dummy, NULL);
sigaction(SIGSTOP, &sa_dummy, NULL);
+ reboot(RB_DISABLE_CAD);
}
}