From 704619878e310b0a6ab2934c81a8d4c560927650 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Wed, 31 Dec 2014 15:04:48 +0100 Subject: [PATCH] Fix memory leak during parallel writing with multiplied warnings. --- sphinx/builders/__init__.py | 4 +++- sphinx/util/parallel.py | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index 5370dd70f..bbb9b3117 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -357,9 +357,11 @@ class Builder(object): def _write_parallel(self, docnames, warnings, nproc): def write_process(docs): + local_warnings = [] + self.env.set_warnfunc(lambda *args: local_warnings.append(args)) for docname, doctree in docs: self.write_doc(docname, doctree) - return warnings + return local_warnings def add_warnings(docs, wlist): warnings.extend(wlist) diff --git a/sphinx/util/parallel.py b/sphinx/util/parallel.py index 5f9e8effd..7e238ab18 100644 --- a/sphinx/util/parallel.py +++ b/sphinx/util/parallel.py @@ -101,7 +101,9 @@ class ParallelTasks(object): del self._threads[tid] if exc: raise SphinxParallelError(*result) - self._result_funcs.pop(tid)(arg, result) + result_func = self._result_funcs.pop(tid)(arg, result) + if result_func: + result_func(result) self._nprocessed += 1 def join(self): @@ -110,7 +112,9 @@ class ParallelTasks(object): del self._threads[tid] if exc: raise SphinxParallelError(*result) - self._result_funcs.pop(tid)(arg, result) + result_func = self._result_funcs.pop(tid)(arg, result) + if result_func: + result_func(result) self._nprocessed += 1 # there shouldn't be any threads left...