From ac36d5db7e85ff2861b62ab7212655d49eee1b42 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Wed, 7 Oct 2009 14:03:19 +0200 Subject: [PATCH] base/init: kill loginit after one second of waiting --- modules.d/99base/init | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/modules.d/99base/init b/modules.d/99base/init index a5b565c3..24832abd 100755 --- a/modules.d/99base/init +++ b/modules.d/99base/init @@ -2,15 +2,40 @@ # # Licensed under the GPLv2 # -# Copyright 2008, Red Hat, Inc. +# Copyright 2008-2009, Red Hat, Inc. +# Harald Hoyer # Jeremy Katz +wait_for_loginit() +{ + if getarg rdinitdebug; then + set +x + exec 1>- 2>- + exec 0<>/dev/console 1<>/dev/console 2<>/dev/console + # wait for loginit + i=0 + while [ $i -lt 10 ]; do + j=$(jobs) + [ -z "$j" ] && break + [ -z "${j##*Running*}" ] || break + sleep 0.1 + i=$[$i+1] + done + [ $i -eq 10 ] && kill %1 >/dev/null 2>&1 + + while pidof -x /sbin/loginit >/dev/null 2>&1; do + for pid in $(pidof -x /sbin/loginit); do + kill $HARD $pid >/dev/null 2>&1 + done + HARD="-9" + done + set -x + fi +} + emergency_shell() { - set +x - exec 0<>/dev/console 1<>/dev/console 2<>/dev/console - # wait for loginit - wait + wait_for_loginit echo ; echo echo $@ source_all emergency @@ -58,7 +83,10 @@ if getarg rdinitdebug; then mkfifo /dev/initlog.pipe /sbin/loginit $DRACUT_QUIET /dev/console 2>&1 & exec >/dev/initlog.pipe 2>&1 +else + exec 0<>/dev/console 1<>/dev/console 2<>/dev/console fi + setdebug mkdir /dev/shm @@ -245,9 +273,7 @@ fi info "Switching root" -exec 0<>/dev/console 1<>/dev/console 2<>/dev/console -# wait for loginit -wait +wait_for_loginit exec switch_root "$NEWROOT" "$INIT" $initargs || { echo "Something went very badly wrong in the initramfs. Please "