aboutsummaryrefslogtreecommitdiffstats
path: root/thread.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-20 13:41:18 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-20 13:41:18 +1200
commitdbc2b89bc042d73e60aeb7d56686aa28d82e2622 (patch)
tree24df8e3faf9d37b9020c23ce21c2c769beb13920 /thread.c
parent6bf1285b2069ff736e283a1f8328852e3175fccc (diff)
downloadruby-dbc2b89bc042d73e60aeb7d56686aa28d82e2622.tar.gz
Ensure `vm_stack` is cleared after fork.
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/thread.c b/thread.c
index 492722b085..6c4e6506e8 100644
--- a/thread.c
+++ b/thread.c
@@ -596,7 +596,11 @@ thread_cleanup_func_before_exec(void *th_ptr)
{
rb_thread_t *th = th_ptr;
th->status = THREAD_KILLED;
+ // The thread stack doesn't exist in the forked process:
th->ec->machine.stack_start = th->ec->machine.stack_end = NULL;
+
+ // The vm_stack is `alloca`ed on the thread stack, so it's gone too:
+ rb_ec_clear_vm_stack(th->ec);
}
static void