Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Side by Side Diff: pylib/gyp/generator/ninja.py

Issue 11098023: Make child process errors kill gyp when parallel processing is on. (Closed) Base URL: http://git.chromium.org/external/gyp.git@master
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pylib/gyp/input.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 Google Inc. All rights reserved. 1 # Copyright (c) 2012 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import copy 5 import copy
6 import hashlib 6 import hashlib
7 import multiprocessing 7 import multiprocessing
8 import os.path 8 import os.path
9 import re 9 import re
10 import signal
10 import subprocess 11 import subprocess
11 import sys 12 import sys
12 import gyp 13 import gyp
13 import gyp.common 14 import gyp.common
14 import gyp.msvs_emulation 15 import gyp.msvs_emulation
15 import gyp.MSVSVersion 16 import gyp.MSVSVersion
16 import gyp.xcode_emulation 17 import gyp.xcode_emulation
17 18
18 from gyp.common import GetEnvironFallback 19 from gyp.common import GetEnvironFallback
19 import gyp.ninja_syntax as ninja_syntax 20 import gyp.ninja_syntax as ninja_syntax
(...skipping 1722 matching lines...) Expand 10 before | Expand all | Expand 10 after
1742 def PerformBuild(data, configurations, params): 1743 def PerformBuild(data, configurations, params):
1743 options = params['options'] 1744 options = params['options']
1744 for config in configurations: 1745 for config in configurations:
1745 builddir = os.path.join(options.toplevel_dir, 'out', config) 1746 builddir = os.path.join(options.toplevel_dir, 'out', config)
1746 arguments = ['ninja', '-C', builddir] 1747 arguments = ['ninja', '-C', builddir]
1747 print 'Building [%s]: %s' % (config, arguments) 1748 print 'Building [%s]: %s' % (config, arguments)
1748 subprocess.check_call(arguments) 1749 subprocess.check_call(arguments)
1749 1750
1750 1751
1751 def CallGenerateOutputForConfig(arglist): 1752 def CallGenerateOutputForConfig(arglist):
1753 # Ignore the interrupt signal so that the parent process catches it and
1754 # kills all multiprocessing children.
1755 signal.signal(signal.SIGINT, signal.SIG_IGN)
scottmg 2012/10/09 18:12:54 is this going to break ctrl-c in non-parallel?
1756
1752 (target_list, target_dicts, data, params, config_name) = arglist 1757 (target_list, target_dicts, data, params, config_name) = arglist
1753 GenerateOutputForConfig(target_list, target_dicts, data, params, config_name) 1758 GenerateOutputForConfig(target_list, target_dicts, data, params, config_name)
1754 1759
1760
1755 def GenerateOutput(target_list, target_dicts, data, params): 1761 def GenerateOutput(target_list, target_dicts, data, params):
1756 user_config = params.get('generator_flags', {}).get('config', None) 1762 user_config = params.get('generator_flags', {}).get('config', None)
1757 if user_config: 1763 if user_config:
1758 GenerateOutputForConfig(target_list, target_dicts, data, params, 1764 GenerateOutputForConfig(target_list, target_dicts, data, params,
1759 user_config) 1765 user_config)
1760 else: 1766 else:
1761 config_names = target_dicts[target_list[0]]['configurations'].keys() 1767 config_names = target_dicts[target_list[0]]['configurations'].keys()
1762 if params['parallel']: 1768 if params['parallel']:
1763 pool = multiprocessing.Pool(len(config_names)) 1769 try:
1764 arglists = [] 1770 pool = multiprocessing.Pool(len(config_names))
1765 for config_name in config_names: 1771 arglists = []
1766 arglists.append((target_list, target_dicts, data, params, config_name)) 1772 for config_name in config_names:
1767 pool.map(CallGenerateOutputForConfig, arglists) 1773 arglists.append(
1774 (target_list, target_dicts, data, params, config_name))
1775 pool.map(CallGenerateOutputForConfig, arglists)
1776 except KeyboardInterrupt, e:
1777 pool.terminate()
1778 raise e
1768 else: 1779 else:
1769 for config_name in config_names: 1780 for config_name in config_names:
1770 GenerateOutputForConfig(target_list, target_dicts, data, params, 1781 GenerateOutputForConfig(target_list, target_dicts, data, params,
1771 config_name) 1782 config_name)
OLDNEW
« no previous file with comments | « no previous file | pylib/gyp/input.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698