From 38c2be5ffe644b187625ef1b311f765dc82b238b Mon Sep 17 00:00:00 2001 From: Timo Kaufmann Date: Sun, 21 Oct 2018 14:16:06 +0200 Subject: [PATCH] sage: fix docbuild This is only a hotfix without really knowing the issue. See https://groups.google.com/forum/#!msg/sage-packaging/VU4h8IWGFLA/mrmCMocYBwAJ --- .../patches/revert-sphinx-always-fork.patch | 71 +++++++++++++++++++ .../science/math/sage/sage-src.nix | 5 ++ 2 files changed, 76 insertions(+) create mode 100644 pkgs/applications/science/math/sage/patches/revert-sphinx-always-fork.patch diff --git a/pkgs/applications/science/math/sage/patches/revert-sphinx-always-fork.patch b/pkgs/applications/science/math/sage/patches/revert-sphinx-always-fork.patch new file mode 100644 index 00000000000..64dd6fd9377 --- /dev/null +++ b/pkgs/applications/science/math/sage/patches/revert-sphinx-always-fork.patch @@ -0,0 +1,71 @@ +commit f1c59929c3c180ac283334c2b3c901ac8c82f6b1 +Author: Timo Kaufmann +Date: Sat Oct 20 20:07:41 2018 +0200 + + Revert "Something related to the sphinxbuild seems to be leaking memory" + + This reverts commit 7d85dc796c58c3de57401bc22d3587b94e205091. + +diff --git a/src/sage_setup/docbuild/__init__.py b/src/sage_setup/docbuild/__init__.py +index 0b24b1a60b..084c3f89d7 100644 +--- a/src/sage_setup/docbuild/__init__.py ++++ b/src/sage_setup/docbuild/__init__.py +@@ -265,29 +265,35 @@ class DocBuilder(object): + # import the customized builder for object.inv files + inventory = builder_helper('inventory') + +-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 ++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 ++ + + ########################################## + # Parallel Building Ref Manual # diff --git a/pkgs/applications/science/math/sage/sage-src.nix b/pkgs/applications/science/math/sage/sage-src.nix index f217a7a0cae..942ee5f2200 100644 --- a/pkgs/applications/science/math/sage/sage-src.nix +++ b/pkgs/applications/science/math/sage/sage-src.nix @@ -27,6 +27,11 @@ stdenv.mkDerivation rec { # https://trac.sagemath.org/ticket/25316 # https://github.com/python/cpython/pull/7476 ./patches/python-5755-hotpatch.patch + + # Revert the commit that made the sphinx build fork even in the single thread + # case. For some yet unknown reason, that breaks the docbuild on nix and archlinux. + # See https://groups.google.com/forum/#!msg/sage-packaging/VU4h8IWGFLA/mrmCMocYBwAJ. + ./patches/revert-sphinx-always-fork.patch ]; packageUpgradePatches = [