From 87073a45363e4863fceb821fa626b0197bd2c225 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 2 May 2015 09:23:47 +0530 Subject: [PATCH] Fix #395 (Build scripts: Fix thread leak) --- setup/parallel_build.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/setup/parallel_build.py b/setup/parallel_build.py index 2883cb1605..f819835908 100644 --- a/setup/parallel_build.py +++ b/setup/parallel_build.py @@ -9,6 +9,7 @@ __copyright__ = '2014, Kovid Goyal ' import subprocess from multiprocessing.dummy import Pool from functools import partial +from contextlib import closing from setup.build_environment import cpu_count @@ -30,22 +31,24 @@ def create_job(cmd, human_text=None): def parallel_build(jobs, log, verbose=True): p = Pool(cpu_count) - for ok, stdout, stderr in p.imap(run_worker, jobs): - if verbose or not ok: - log(stdout) - if stderr: - log(stderr) - if not ok: - return False - return True + with closing(p): + for ok, stdout, stderr in p.imap(run_worker, jobs): + if verbose or not ok: + log(stdout) + if stderr: + log(stderr) + if not ok: + return False + return True def parallel_check_output(jobs, log): p = Pool(cpu_count) - for ok, stdout, stderr in p.imap( - partial(run_worker, decorate=False), ((j, '') for j in jobs)): - if not ok: - log(stdout) - if stderr: - log(stderr) - raise SystemExit(1) - yield stdout + with closing(p): + for ok, stdout, stderr in p.imap( + partial(run_worker, decorate=False), ((j, '') for j in jobs)): + if not ok: + log(stdout) + if stderr: + log(stderr) + raise SystemExit(1) + yield stdout