diff options
| author | Alp Toker <alp@nuanti.com> | 2013-10-26 08:22:44 +0000 |
|---|---|---|
| committer | Alp Toker <alp@nuanti.com> | 2013-10-26 08:22:44 +0000 |
| commit | 9ade45482aaed8b098d03b48414ded053f5e83f7 (patch) | |
| tree | db489db3db70aad1a7b1968e7b8543696057f299 /llvm/utils/lit | |
| parent | 6bedcfa79f3adbb398fbc2c8813ba17a5d48f11d (diff) | |
| download | bcm5719-llvm-9ade45482aaed8b098d03b48414ded053f5e83f7.tar.gz bcm5719-llvm-9ade45482aaed8b098d03b48414ded053f5e83f7.zip | |
lit: handle late multiprocessing errors gracefully
This should be a better fix for lit multiprocessing failures, replacing the
OpenBSD and FreeBSD workarounds in r193413 and r193457.
Reference: http://bugs.python.org/issue3770
llvm-svn: 193463
Diffstat (limited to 'llvm/utils/lit')
| -rwxr-xr-x | llvm/utils/lit/lit/main.py | 3 | ||||
| -rw-r--r-- | llvm/utils/lit/lit/run.py | 16 |
2 files changed, 11 insertions, 8 deletions
diff --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py index 9754f2f9239..6f672a01eb3 100755 --- a/llvm/utils/lit/lit/main.py +++ b/llvm/utils/lit/lit/main.py @@ -111,8 +111,7 @@ def write_test_results(run, lit_config, testing_time, output_path): def main(builtinParameters = {}): # Use processes by default on Unix platforms. isWindows = platform.system() == 'Windows' - # multiprocessing is broken on various BSD Python versions: http://bugs.python.org/issue3770 - useProcessesIsDefault = (not isWindows) and ('BSD' not in platform.system()) + useProcessesIsDefault = not isWindows global options from optparse import OptionParser, OptionGroup diff --git a/llvm/utils/lit/lit/run.py b/llvm/utils/lit/lit/run.py index 8642ff18927..8aaf52f1aec 100644 --- a/llvm/utils/lit/lit/run.py +++ b/llvm/utils/lit/lit/run.py @@ -209,16 +209,20 @@ class Run(object): """ # Choose the appropriate parallel execution implementation. - if jobs == 1 or not use_processes or multiprocessing is None: + if jobs != 1 and use_processes and multiprocessing: + try: + task_impl = multiprocessing.Process + queue_impl = multiprocessing.Queue + canceled_flag = multiprocessing.Value('i', 0) + consumer = MultiprocessResultsConsumer(self, display, jobs) + except ImportError: + # Workaround for BSD: http://bugs.python.org/issue3770 + consumer = None + if not consumer: task_impl = threading.Thread queue_impl = queue.Queue canceled_flag = LockedValue(0) consumer = ThreadResultsConsumer(display) - else: - task_impl = multiprocessing.Process - queue_impl = multiprocessing.Queue - canceled_flag = multiprocessing.Value('i', 0) - consumer = MultiprocessResultsConsumer(self, display, jobs) # Create the test provider. provider = TestProvider(self.tests, jobs, queue_impl, canceled_flag) |

