| 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)
|
| +
|
| (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,
|
|
|