Chromium Code Reviews| Index: pylib/gyp/generator/ninja.py |
| diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py |
| index c81b71dd12d908cfd7dbdc3879707d325169236e..49be332365bc77a25299b3fedab18167212c4d18 100644 |
| --- a/pylib/gyp/generator/ninja.py |
| +++ b/pylib/gyp/generator/ninja.py |
| @@ -7,6 +7,7 @@ import hashlib |
| import multiprocessing |
| import os.path |
| import re |
| +import signal |
| import subprocess |
| import sys |
| import gyp |
| @@ -1749,9 +1750,14 @@ def PerformBuild(data, configurations, params): |
| def CallGenerateOutputForConfig(arglist): |
| + # Ignore the interrupt signal so that the parent process catches it and |
| + # kills all multiprocessing children. |
| + signal.signal(signal.SIGINT, signal.SIG_IGN) |
|
scottmg
2012/10/09 18:12:54
is this going to break ctrl-c in non-parallel?
|
| + |
| (target_list, target_dicts, data, params, config_name) = arglist |
| GenerateOutputForConfig(target_list, target_dicts, data, params, config_name) |
| + |
| def GenerateOutput(target_list, target_dicts, data, params): |
| user_config = params.get('generator_flags', {}).get('config', None) |
| if user_config: |
| @@ -1760,11 +1766,16 @@ def GenerateOutput(target_list, target_dicts, data, params): |
| else: |
| config_names = target_dicts[target_list[0]]['configurations'].keys() |
| if params['parallel']: |
| - pool = multiprocessing.Pool(len(config_names)) |
| - arglists = [] |
| - for config_name in config_names: |
| - arglists.append((target_list, target_dicts, data, params, config_name)) |
| - pool.map(CallGenerateOutputForConfig, arglists) |
| + try: |
| + pool = multiprocessing.Pool(len(config_names)) |
| + arglists = [] |
| + for config_name in config_names: |
| + arglists.append( |
| + (target_list, target_dicts, data, params, config_name)) |
| + pool.map(CallGenerateOutputForConfig, arglists) |
| + except KeyboardInterrupt, e: |
| + pool.terminate() |
| + raise e |
| else: |
| for config_name in config_names: |
| GenerateOutputForConfig(target_list, target_dicts, data, params, |