On Saturday 14 February 2009 14:02, Bernhard Reutner-Fischer wrote:
> Hi,
> 
> When CONFIG_FEATURE_KILL_REMOVED is off then we end up with
> 
> $ egrep "(INIT|KILL)" .config
> CONFIG_INIT=y
> CONFIG_FEATURE_USE_INITTAB=y
> # CONFIG_FEATURE_KILL_REMOVED is not set
> CONFIG_FEATURE_KILL_DELAY=
> CONFIG_FEATURE_INIT_SCTTY=y
> CONFIG_FEATURE_INIT_SYSLOG=y
> CONFIG_FEATURE_INIT_COREDUMPS=y
> CONFIG_FEATURE_INITRD=y
> CONFIG_KILL=y
> CONFIG_KILLALL=y
> CONFIG_KILLALL5=y
> CONFIG_PKILL=y
> 
> That KILL_DELAY does no good for this spot:
> 
> Index: init/init.c
> ===================================================================
> --- init/init.c       (revision 25330)
> +++ init/init.c       (working copy)
> - improve helptext
> @@ -788,10 +788,13 @@ static void reload_inittab(void)
>               for (a = init_action_list; a; a = a->next)
>                       if (a->action_type == ONCE && a->pid != 0)
>                               kill(a->pid, SIGTERM);
> -             if (CONFIG_FEATURE_KILL_DELAY) {
> +             if (ENABLE_FEATURE_KILL_DELAY) {
>                       /* NB: parent will wait in NOMMU case */
>                       if ((BB_MMU ? fork() : vfork()) == 0) { /* child */
> -                             sleep(CONFIG_FEATURE_KILL_DELAY);
> +#if !ENABLE_FEATURE_KILL_REMOVED && ENABLE_FEATURE_KILL_DELAY
> +#define CONFIG_FEATURE_KILL_DELAY_SECS 0 /* logic goof w/ kconfig */
> +#endif
> +                             sleep(CONFIG_FEATURE_KILL_DELAY_SECS);
>                               for (a = init_action_list; a; a = a->next)
>                                       if (a->action_type == ONCE && a->pid != 
> 0)
>                                               kill(a->pid, SIGKILL);
> 
> This should work but doesn't sound too clean. Suggestions?

Hmm, there goes my attempt to make Rob happier :)
(he wanted less #if's in init.c).

This is the case when #if is better than if
(because #if would work, and if won't):

--- init/init.c (revision 25310)
+++ init/init.c (working copy)
@@ -782,23 +782,23 @@
         */
        parse_inittab();
 
-       if (ENABLE_FEATURE_KILL_REMOVED) {
-               /* Kill stale entries */
-               /* Be nice and send SIGTERM first */
-               for (a = init_action_list; a; a = a->next)
-                       if (a->action_type == ONCE && a->pid != 0)
-                               kill(a->pid, SIGTERM);
-               if (CONFIG_FEATURE_KILL_DELAY) {
-                       /* NB: parent will wait in NOMMU case */
-                       if ((BB_MMU ? fork() : vfork()) == 0) { /* child */
-                               sleep(CONFIG_FEATURE_KILL_DELAY);
-                               for (a = init_action_list; a; a = a->next)
-                                       if (a->action_type == ONCE && a->pid != 
0)
-                                               kill(a->pid, SIGKILL);
-                               _exit(EXIT_SUCCESS);
-                       }
+#if ENABLE_FEATURE_KILL_REMOVED
+       /* Kill stale entries */
+       /* Be nice and send SIGTERM first */
+       for (a = init_action_list; a; a = a->next)
+               if (a->action_type == ONCE && a->pid != 0)
+                       kill(a->pid, SIGTERM);
+       if (CONFIG_FEATURE_KILL_DELAY) {
+               /* NB: parent will wait in NOMMU case */
+               if ((BB_MMU ? fork() : vfork()) == 0) { /* child */
+                       sleep(CONFIG_FEATURE_KILL_DELAY);
+                       for (a = init_action_list; a; a = a->next)
+                               if (a->action_type == ONCE && a->pid != 0)
+                                       kill(a->pid, SIGKILL);
+                       _exit(EXIT_SUCCESS);
                }
        }
+#endif
 
        /* Remove stale (ONCE) and not useful (SYSINIT,WAIT) entries */
        nextp = &init_action_list;

--
vda
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to