[arch-commits] Commit in sagemath-doc/trunk (sagemath-doc-segfault.patch)

Antonio Rojas arojas at archlinux.org
Wed Dec 5 16:51:54 UTC 2018


    Date: Wednesday, December 5, 2018 @ 16:51:53
  Author: arojas
Revision: 411558

Add missing patch

Added:
  sagemath-doc/trunk/sagemath-doc-segfault.patch

-----------------------------+
 sagemath-doc-segfault.patch |   63 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

Added: sagemath-doc-segfault.patch
===================================================================
--- sagemath-doc-segfault.patch	                        (rev 0)
+++ sagemath-doc-segfault.patch	2018-12-05 16:51:53 UTC (rev 411558)
@@ -0,0 +1,63 @@
+diff --git a/src/sage_setup/docbuild/__init__.py b/src/sage_setup/docbuild/__init__.py
+index 5877b5b..7dc8ff7 100644
+--- a/src/sage_setup/docbuild/__init__.py
++++ b/src/sage_setup/docbuild/__init__.py
+@@ -265,35 +265,29 @@ class DocBuilder(object):
+     # import the customized builder for object.inv files
+     inventory = builder_helper('inventory')
+ 
+-if NUM_THREADS > 1:
+-    def build_many(target, args):
+-        from multiprocessing import Pool
+-        pool = Pool(NUM_THREADS, maxtasksperchild=1)
+-        # map_async handles KeyboardInterrupt correctly. Plain map and
+-        # apply_async does not, so don't use it.
+-        x = pool.map_async(target, args, 1)
+-        try:
+-            ret = x.get(99999)
+-            pool.close()
+-            pool.join()
+-        except Exception:
+-            pool.terminate()
+-            if ABORT_ON_ERROR:
+-                raise
+-        return ret
+-else:
+-    def build_many(target, args):
+-        results = []
+-
+-        for arg in args:
+-            try:
+-                results.append(target(arg))
+-            except Exception:
+-                if ABORT_ON_ERROR:
+-                    raise
+-
+-        return results
+-
++def build_many(target, args):
++    # Pool() uses an actual fork() to run each new instance. This is important
++    # for performance reasons, i.e., don't use a forkserver when it becomes
++    # available with Python 3: Here, sage is already initialized which is quite
++    # costly, with a forkserver we would have to reinitialize it for every
++    # document we build. At the same time, don't serialize this by taking the
++    # pool (and thus the call to fork()) out completely: The call to Sphinx
++    # leaks memory, so we need to build each document in its own process to
++    # control the RAM usage.
++    from multiprocessing import Pool
++    pool = Pool(NUM_THREADS, maxtasksperchild=1)
++    # map_async handles KeyboardInterrupt correctly. Plain map and
++    # apply_async does not, so don't use it.
++    x = pool.map_async(target, args, 1)
++    try:
++        ret = x.get(99999)
++        pool.close()
++        pool.join()
++    except Exception:
++        pool.terminate()
++        if ABORT_ON_ERROR:
++            raise
++    return ret
+ 
+ ##########################################
+ #      Parallel Building Ref Manual      #



More information about the arch-commits mailing list