forked from openkylin/platform_build
Close inherited PIPE before doing work
Gmake in Darwin has file descriptor leak. In a full build, ota_from_target_files will inherits more than 2000 open PIPEs from gmake and fails in a call to select.select(). This change fixes the build by closing the PIPEs before doing real work. Change-Id: Ie7035d7add0b1da3afb6bf9c2009d40f8c7d29b3
This commit is contained in:
parent
4a2ecaf5dc
commit
7e6d4e45d9
|
@ -18,6 +18,7 @@ import getopt
|
|||
import getpass
|
||||
import imp
|
||||
import os
|
||||
import platform
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
|
@ -63,6 +64,22 @@ def Run(args, **kwargs):
|
|||
return subprocess.Popen(args, **kwargs)
|
||||
|
||||
|
||||
def CloseInheritedPipes():
|
||||
""" Gmake in MAC OS has file descriptor (PIPE) leak. We close those fds
|
||||
before doing other work."""
|
||||
if platform.system() != "Darwin":
|
||||
return
|
||||
for d in range(3, 1025):
|
||||
try:
|
||||
stat = os.fstat(d)
|
||||
if stat is not None:
|
||||
pipebit = stat[0] & 0x1000
|
||||
if pipebit != 0:
|
||||
os.close(d)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
||||
def LoadInfoDict(zip):
|
||||
"""Read and parse the META/misc_info.txt key/value pairs from the
|
||||
input target files and return a dict."""
|
||||
|
|
|
@ -201,6 +201,7 @@ def main(argv):
|
|||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
common.CloseInheritedPipes()
|
||||
main(sys.argv[1:])
|
||||
except common.ExternalError, e:
|
||||
print
|
||||
|
|
|
@ -807,6 +807,7 @@ def main(argv):
|
|||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
common.CloseInheritedPipes()
|
||||
main(sys.argv[1:])
|
||||
except common.ExternalError, e:
|
||||
print
|
||||
|
|
Loading…
Reference in New Issue