diff --git a/pkgs/tools/package-management/lix/default.nix b/pkgs/tools/package-management/lix/default.nix index 814bd457e050..747b76175641 100644 --- a/pkgs/tools/package-management/lix/default.nix +++ b/pkgs/tools/package-management/lix/default.nix @@ -64,24 +64,10 @@ let confDir ; - boehmgc = - # TODO: Why is this called `boehmgc-nix_2_3`? - let - boehmgc-nix_2_3 = boehmgc.override { - enableLargeConfig = true; - initialMarkStackSize = 1048576; - }; - in - # Since Lix 2.91 does not use boost coroutines, it does not need boehmgc patches either. - if lib.versionOlder lix-args.version "2.91" then - boehmgc-nix_2_3.overrideAttrs (drv: { - patches = (drv.patches or [ ]) ++ [ - # Part of the GC solution in https://github.com/NixOS/nix/pull/4944 - ../nix/patches/boehmgc-coroutine-sp-fallback.patch - ]; - }) - else - boehmgc-nix_2_3; + boehmgc = boehmgc.override { + enableLargeConfig = true; + initialMarkStackSize = 1048576; + }; aws-sdk-cpp = (aws-sdk-cpp.override { diff --git a/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch b/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch deleted file mode 100644 index 2fef8185aea2..000000000000 --- a/pkgs/tools/package-management/nix/patches/boehmgc-coroutine-sp-fallback.patch +++ /dev/null @@ -1,59 +0,0 @@ -diff --git a/pthread_stop_world.c b/pthread_stop_world.c -index 2b45489..0e6d8ef 100644 ---- a/pthread_stop_world.c -+++ b/pthread_stop_world.c -@@ -776,6 +776,8 @@ - /* world is stopped. Should not fail if it isn't. */ - GC_INNER void GC_push_all_stacks(void) - { -+ size_t stack_limit; -+ pthread_attr_t pattr; - GC_bool found_me = FALSE; - size_t nthreads = 0; - int i; -@@ -868,6 +870,45 @@ - hi = p->altstack + p->altstack_size; - # endif - /* FIXME: Need to scan the normal stack too, but how ? */ -+ } else { -+ #if defined(HAVE_PTHREAD_ATTR_GET_NP) -+ if (pthread_attr_init(&pattr) != 0) { -+ ABORT("GC_push_all_stacks: pthread_attr_init failed!"); -+ } -+ if (pthread_attr_get_np(p->id, &pattr) != 0) { -+ ABORT("GC_push_all_stacks: pthread_attr_get_np failed!"); -+ } -+ #elif defined(HAVE_PTHREAD_GETATTR_NP) -+ if (pthread_getattr_np(p->id, &pattr)) { -+ ABORT("GC_push_all_stacks: pthread_getattr_np failed!"); -+ } -+ #else -+ /* assume default */ -+ if (pthread_attr_init(&pattr) != 0) { -+ ABORT("GC_push_all_stacks: pthread_attr_init failed!"); -+ } -+ #endif -+ if (pthread_attr_getstacksize(&pattr, &stack_limit)) { -+ ABORT("GC_push_all_stacks: pthread_attr_getstacksize failed!"); -+ } -+ if (pthread_attr_destroy(&pattr)) { -+ ABORT("GC_push_all_stacks: pthread_attr_destroy failed!"); -+ } -+ // When a thread goes into a coroutine, we lose its original sp until -+ // control flow returns to the thread. -+ // While in the coroutine, the sp points outside the thread stack, -+ // so we can detect this and push the entire thread stack instead, -+ // as an approximation. -+ // We assume that the coroutine has similarly added its entire stack. -+ // This could be made accurate by cooperating with the application -+ // via new functions and/or callbacks. -+ #ifndef STACK_GROWS_UP -+ if (lo >= hi || lo < hi - stack_limit) { // sp outside stack -+ lo = hi - stack_limit; -+ } -+ #else -+ #error "STACK_GROWS_UP not supported in boost_coroutine2 (as of june 2021), so we don't support it in Nix." -+ #endif - } - # ifdef STACKPTR_CORRECTOR_AVAILABLE - if (GC_sp_corrector != 0)