=== modified file 'pkgcore/spawn.py' --- pkgcore/spawn.py +++ pkgcore/spawn.py @@ -8,13 +8,20 @@ from pkgcore.util.mappings import ProtectedDict from pkgcore.const import BASH_BINARY, SANDBOX_BINARY, FAKED_PATH, LIBFAKEROOT_PATH - try: import resource max_fd_limit = resource.getrlimit(resource.RLIMIT_NOFILE)[0] except ImportError: max_fd_limit = 256 + +if os.path.isdir("/proc/%i/fd" % os.getpid()): + def get_open_fds(): + return map(int, os.listdir("/proc/%i/fd" % os.getpid())) +else: + def get_open_fds(): + return xrange(max_fd_limit) + sandbox_capable = (os.path.isfile(SANDBOX_BINARY) and os.access(SANDBOX_BINARY, os.X_OK)) @@ -163,6 +170,7 @@ fd_pipes[1] = pw fd_pipes[2] = pw + pid = os.fork() if not pid: @@ -246,7 +254,7 @@ os.dup2(my_fds[fd], fd) # Then close _all_ fds that haven't been explictly # requested to be kept open. - for fd in range(max_fd_limit): + for fd in get_open_fds(): if fd not in my_fds: try: os.close(fd)