summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cont.c4
-rw-r--r--vm.c3
2 files changed, 4 insertions, 3 deletions
diff --git a/cont.c b/cont.c
index e345ac42c1..2b60860edd 100644
--- a/cont.c
+++ b/cont.c
@@ -2587,12 +2587,12 @@ rb_threadptr_root_fiber_release(rb_thread_t *th)
/* ignore. A root fiber object will free th->ec */
}
else {
- rb_execution_context_t *ec = GET_EC();
+ rb_execution_context_t *ec = rb_current_execution_context(false);
VM_ASSERT(th->ec->fiber_ptr->cont.type == FIBER_CONTEXT);
VM_ASSERT(th->ec->fiber_ptr->cont.self == 0);
- if (th->ec == ec) {
+ if (ec && th->ec == ec) {
rb_ractor_set_current_ec(th->ractor, NULL);
}
fiber_free(th->ec->fiber_ptr);
diff --git a/vm.c b/vm.c
index 6334459579..96f4189b14 100644
--- a/vm.c
+++ b/vm.c
@@ -3056,7 +3056,8 @@ ruby_vm_destruct(rb_vm_t *vm)
rb_objspace_free_objects(objspace);
rb_free_generic_iv_tbl_();
rb_free_default_rand_key();
- if (th) {
+ if (th && vm->fork_gen == 0) {
+ /* If we have forked, main_thread may not be the initial thread */
xfree(stack);
ruby_mimfree(th);
}