From 0a5eb4f65a20d37f2051dce8816485dd219fb735 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Sat, 13 Feb 2016 23:55:47 +0200 Subject: Fix handling of wait components * src/pies.h (PIES_COMP_WAIT): Remove. (PIES_COMP_MASK): Save one bit. (PIES_CHLD_NONE, PIES_CHLD_CLEANUP) (PIES_CHLD_WAKEUP): New constants. (pies_schedule_children): New proto. (sysvinit_runlevel_setup): Change signature. * src/pies.c (children_cleanup, got_alarm): Merge into single static variable children_op. All uses updated. (pies_schedule_children): New function. (sig_handler): Update (main): Don't call ctl_open for init process. It is done by inittrans after transition from boot to normal state. Update to use pies_schedule_children. * src/prog.h (IS_ACTIVE_COMPONENT): New macro. * src/progman.c (prog_start): Don't modify prog->v.p.wait. (progman_wake_sleeping): Start usual components only after all "wait" components have terminated. (progman_cleanup): If a "wait" component has terminated, request PIES_CHLD_WAKEUP. * src/sysvinit.c (enstate) : Remove. (enablecomp): Update. (runlevel_setup_prog): Set prog->v.p.wait. (sysvinit_runlevel_setup): Take only one parameter. (inittrans): Remove "wait" and the related mess. Call ctl_open after transition boot -> normal. --- src/pies.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/pies.h') diff --git a/src/pies.h b/src/pies.h index 14ea7b7..bcce32a 100644 --- a/src/pies.h +++ b/src/pies.h @@ -180,8 +180,7 @@ enum pies_comp_mode }; #define PIES_COMP_DEFAULT 0 -#define PIES_COMP_WAIT 0x01 -#define PIES_COMP_MASK(m) (1 << ((m)+1)) +#define PIES_COMP_MASK(m) (1 << ((m))) #define CF_DISABLED 0x001 /* The componenet is disabled */ #define CF_PRECIOUS 0x002 /* The component is precious (should not @@ -317,6 +316,12 @@ void free_redirector (struct redirector *rp); void pies_schedule_action (int act); void free_action (struct action *act); +#define PIES_CHLD_NONE 0 +#define PIES_CHLD_CLEANUP 0x01 +#define PIES_CHLD_WAKEUP 0x02 + +void pies_schedule_children (int op); + void register_prog (struct component *comp); int progman_waiting_p (void); void progman_start (void); @@ -512,7 +517,7 @@ int console_open (int mode); int telinit (const char *arg); int inittab_parse (const char *file); int sysvinit_sigtrans (int sig, int *pact); -void sysvinit_runlevel_setup (int mask, int *wait); +void sysvinit_runlevel_setup (int mask); void sysvinit_sysdep_begin (void); void sysvinit_power (void); -- cgit v1.2.1