1 |
Author: zmedico |
2 |
Date: 2009-07-30 07:29:34 +0000 (Thu, 30 Jul 2009) |
3 |
New Revision: 13856 |
4 |
|
5 |
Modified: |
6 |
main/trunk/bin/ebuild.sh |
7 |
main/trunk/bin/isolated-functions.sh |
8 |
main/trunk/pym/portage/__init__.py |
9 |
Log: |
10 |
Bug #278895 - Make ebuild.sh clean up orphaned processes that may have been |
11 |
left behind by ebuild phases. This works by using setsid to create a new |
12 |
login session for the ebuild.sh process, and `kill -s SIGHUP 0` to send |
13 |
a SIGHUP signal to all processes in the session. The setsid is currently |
14 |
not done on the python side since that would cause the sandbox process in |
15 |
the session, and sandbox produces a warning message if it catches a SIGHUP |
16 |
signal. |
17 |
|
18 |
|
19 |
Modified: main/trunk/bin/ebuild.sh |
20 |
=================================================================== |
21 |
--- main/trunk/bin/ebuild.sh 2009-07-29 22:44:21 UTC (rev 13855) |
22 |
+++ main/trunk/bin/ebuild.sh 2009-07-30 07:29:34 UTC (rev 13856) |
23 |
@@ -71,6 +71,17 @@ |
24 |
PATH=$PORTAGE_BIN_PATH/ebuild-helpers:$PREROOTPATH${PREROOTPATH:+:}/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin${ROOTPATH:+:}$ROOTPATH |
25 |
export PATH |
26 |
|
27 |
+if [[ -z $PORTAGE_SETSID && \ |
28 |
+ -n $EBUILD_SH_ARGS && $EBUILD_SH_ARGS != depend ]] ; then |
29 |
+ if type -P setsid >/dev/null ; then |
30 |
+ # Use setsid to create a new login session so that we can use SIGHUP |
31 |
+ # to ensure that no orphaned subprocesses are left running. |
32 |
+ export PORTAGE_SETSID=1 |
33 |
+ exec setsid "$PORTAGE_BIN_PATH/ebuild.sh" $EBUILD_SH_ARGS |
34 |
+ fi |
35 |
+fi |
36 |
+trap '[[ $PORTAGE_SETSID = 1 ]] && { trap : SIGHUP ; kill -s SIGHUP 0 ; }' EXIT |
37 |
+ |
38 |
source "${PORTAGE_BIN_PATH}/isolated-functions.sh" &>/dev/null |
39 |
|
40 |
# Set IMAGE for minimal backward compatibility with |
41 |
|
42 |
Modified: main/trunk/bin/isolated-functions.sh |
43 |
=================================================================== |
44 |
--- main/trunk/bin/isolated-functions.sh 2009-07-29 22:44:21 UTC (rev 13855) |
45 |
+++ main/trunk/bin/isolated-functions.sh 2009-07-30 07:29:34 UTC (rev 13856) |
46 |
@@ -536,7 +536,8 @@ |
47 |
PORTAGE_DEPCACHEDIR PORTAGE_GID PORTAGE_INST_GID \ |
48 |
PORTAGE_INST_UID PORTAGE_LOG_FILE PORTAGE_MASTER_PID \ |
49 |
PORTAGE_QUIET \ |
50 |
- PORTAGE_REPO_NAME PORTAGE_RESTRICT PORTAGE_UPDATE_ENV \ |
51 |
+ PORTAGE_REPO_NAME PORTAGE_RESTRICT \ |
52 |
+ PORTAGE_SETSID PORTAGE_UPDATE_ENV \ |
53 |
PORTAGE_VERBOSE PORTAGE_WORKDIR_MODE PORTDIR \ |
54 |
PORTDIR_OVERLAY ${!PORTAGE_SANDBOX_*} PREROOTPATH \ |
55 |
PROFILE_PATHS PWORKDIR QA_INTERCEPTORS \ |
56 |
|
57 |
Modified: main/trunk/pym/portage/__init__.py |
58 |
=================================================================== |
59 |
--- main/trunk/pym/portage/__init__.py 2009-07-29 22:44:21 UTC (rev 13855) |
60 |
+++ main/trunk/pym/portage/__init__.py 2009-07-30 07:29:34 UTC (rev 13856) |
61 |
@@ -1048,6 +1048,7 @@ |
62 |
"EBUILD_PHASE", "EMERGE_FROM", "HOMEPAGE", "INHERITED", "IUSE", |
63 |
"KEYWORDS", "LICENSE", "PDEPEND", "PF", "PKGUSE", |
64 |
"PORTAGE_CONFIGROOT", "PORTAGE_IUSE", "PORTAGE_REPO_NAME", |
65 |
+ "PORTAGE_SETSID", |
66 |
"PORTAGE_USE", "PROPERTIES", "PROVIDE", "RDEPEND", "RESTRICT", |
67 |
"ROOT", "SLOT", "SRC_URI" |
68 |
] |