diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-03-27 11:28:12 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-03-27 11:28:12 -0700 |
commit | 144c23efbb4e9565debad03c13c5bcab833a8336 (patch) | |
tree | ab9093b86335c68e8f425ceb56249b308bceb93a /pym/portage/process.py | |
parent | b344222a9a4dfbd811e196bd755ccbec511d0721 (diff) | |
download | portage-144c23efbb4e9565debad03c13c5bcab833a8336.tar.gz portage-144c23efbb4e9565debad03c13c5bcab833a8336.tar.bz2 portage-144c23efbb4e9565debad03c13c5bcab833a8336.zip |
Close fewer file descriptors for fork / no exec.
This will fix bug #374335.
Diffstat (limited to 'pym/portage/process.py')
-rw-r--r-- | pym/portage/process.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/pym/portage/process.py b/pym/portage/process.py index 94687eaa0..f3cec8815 100644 --- a/pym/portage/process.py +++ b/pym/portage/process.py @@ -401,7 +401,19 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, groups, uid, umask, os.execve(binary, myargs, env) def _setup_pipes(fd_pipes, close_fds=True): - """Setup pipes for a forked process.""" + """Setup pipes for a forked process. + + WARNING: When not followed by exec, the close_fds behavior + can trigger interference from destructors that close file + descriptors. This interference happens when the garbage + collector intermittently executes such destructors after their + corresponding file descriptors have been re-used, leading + to intermittent "[Errno 9] Bad file descriptor" exceptions in + forked processes. This problem has been observed with PyPy 1.8, + and also with CPython under some circumstances (as triggered + by xmpppy in bug #374335). In order to close a safe subset of + file descriptors, see portage.locks._close_fds(). + """ my_fds = {} # To protect from cases where direct assignment could # clobber needed fds ({1:2, 2:1}) we first dupe the fds |