Fix rc-abort to notify the plugins we are aborting
This commit is contained in:
parent
7590e7b258
commit
a5ba34ec15
21
src/rc.c
21
src/rc.c
@ -320,11 +320,7 @@ static char read_key (bool block)
|
||||
{
|
||||
struct termios termios;
|
||||
char c = 0;
|
||||
|
||||
/* This locks up rc for some reason!
|
||||
* Why? it used to work fine... */
|
||||
return 0;
|
||||
|
||||
|
||||
if (! isatty (STDIN_FILENO))
|
||||
return (false);
|
||||
|
||||
@ -456,6 +452,8 @@ static void handle_signal (int sig)
|
||||
{
|
||||
int serrno = errno;
|
||||
char signame[10] = { '\0' };
|
||||
char *run;
|
||||
char *prev;
|
||||
|
||||
switch (sig) {
|
||||
case SIGINT:
|
||||
@ -474,8 +472,14 @@ static void handle_signal (int sig)
|
||||
signal (SIGTERM, SIG_IGN);
|
||||
killpg (getpgrp (), SIGTERM);
|
||||
|
||||
/* If we're in boot runlevel then change into single-user mode */
|
||||
if (strcmp (rc_get_runlevel (), RC_LEVEL_BOOT) == 0)
|
||||
/* Notify plugins we are aborting */
|
||||
rc_plugin_run (rc_hook_abort, "rc");
|
||||
|
||||
run = getenv ("RUNLEVEL");
|
||||
prev = getenv ("PREVLEVEL");
|
||||
/* Only drop into single user mode if we're booting */
|
||||
if ((prev && strcmp (prev, "S") == 0) ||
|
||||
(run && strcmp (run, "S") == 0))
|
||||
single_user ();
|
||||
|
||||
exit (EXIT_FAILURE);
|
||||
@ -557,9 +561,6 @@ int main (int argc, char **argv)
|
||||
atexit (cleanup);
|
||||
newlevel = argv[0];
|
||||
|
||||
/* Start a new process group */
|
||||
setpgrp();
|
||||
|
||||
/* Setup a signal handler */
|
||||
signal (SIGINT, handle_signal);
|
||||
signal (SIGQUIT, handle_signal);
|
||||
|
3
src/rc.h
3
src/rc.h
@ -139,6 +139,9 @@ typedef enum
|
||||
rc_hook_runlevel_start_in = 5,
|
||||
rc_hook_runlevel_start_out = 8,
|
||||
/* We reserved a few numbers if we need rc_runlevel_stop_now and done */
|
||||
rc_hook_abort = 99,
|
||||
/* We send the abort if an init script requests we abort and drop
|
||||
* into single user mode if system not fully booted */
|
||||
rc_hook_service_stop_in = 101,
|
||||
rc_hook_service_stop_now,
|
||||
rc_hook_service_stop_done,
|
||||
|
Loading…
Reference in New Issue
Block a user