lix: remove no longer necessary boehmgc-coroutine-sp-fallback.patch
lix < 2.91 is no longer in nixpkgs and nix itself no longer needs patched boehm. Doesn't result in any rebuilds as verified via ci/eval.
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user