Bug #250148 - Prevent ebuild.sh subprocess from inheriting file descriptor
authorZac Medico <zmedico@gentoo.org>
Fri, 12 Dec 2008 21:28:54 +0000 (21:28 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 12 Dec 2008 21:28:54 +0000 (21:28 -0000)
9, since otherwise if a daemon process such as udevd gets spawned then it
can inherit the file descriptor and hang emerge. (trunk r12189)

svn path=/main/branches/2.1.6/; revision=12222

bin/ebuild.sh

index 0a16e8a7a4118a1b9d85886f9afb6f77df2e43e1..ce6a0673851498c9e5b662c9846cd5bdad5c2e58 100755 (executable)
@@ -2086,16 +2086,26 @@ ebuild_main() {
        fi
 }
 
-[[ -n $EBUILD_SH_ARGS ]] && ebuild_main
+if [[ $EBUILD_PHASE = depend ]] ; then
+       ebuild_main
+elif [[ -n $EBUILD_SH_ARGS ]] ; then
+       (
+               # Don't allow subprocesses to inherit the pipe which
+               # emerge uses to monitor ebuild.sh.
+               exec 9>&-
 
-# Save the env only for relevant phases.
-if [ -n "${EBUILD_SH_ARGS}" ] && \
-       ! hasq ${EBUILD_SH_ARGS} clean depend help info nofetch ; then
-       # Save current environment and touch a success file. (echo for success)
-       umask 002
-       save_ebuild_env | filter_readonly_variables > "${T}/environment"
-       chown portage:portage "${T}/environment" &>/dev/null
-       chmod g+w "${T}/environment" &>/dev/null
+               ebuild_main
+
+               # Save the env only for relevant phases.
+               if ! hasq "$EBUILD_SH_ARGS" clean help info nofetch ; then
+                       umask 002
+                       save_ebuild_env | filter_readonly_variables > "$T/environment"
+                       chown portage:portage "$T/environment" &>/dev/null
+                       chmod g+w "$T/environment" &>/dev/null
+               fi
+               exit 0
+       )
+       exit $?
 fi
 
 # Do not exit when ebuild.sh is sourced by other scripts.