summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cont.c6
-rw-r--r--internal/cont.h2
-rw-r--r--vm.c3
3 files changed, 9 insertions, 2 deletions
diff --git a/cont.c b/cont.c
index 36f47d9ee6..590d6c250f 100644
--- a/cont.c
+++ b/cont.c
@@ -1194,6 +1194,12 @@ cont_init_mjit_cont(rb_context_t *cont)
}
}
+struct rb_execution_context_struct *
+rb_fiberptr_get_ec(struct rb_fiber_struct *fiber)
+{
+ return &fiber->cont.saved_ec;
+}
+
static void
cont_init(rb_context_t *cont, rb_thread_t *th)
{
diff --git a/internal/cont.h b/internal/cont.h
index 5ab120e9ab..abffc97104 100644
--- a/internal/cont.h
+++ b/internal/cont.h
@@ -12,6 +12,7 @@
struct rb_thread_struct; /* in vm_core.h */
struct rb_fiber_struct; /* in cont.c */
+struct rb_execution_context_struct; /* in vm_core.c */
/* cont.c */
void rb_fiber_reset_root_local_storage(struct rb_thread_struct *);
@@ -20,5 +21,6 @@ void rb_fiber_init_mjit_cont(struct rb_fiber_struct *fiber);
VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber);
unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber);
+struct rb_execution_context_struct * rb_fiberptr_get_ec(struct rb_fiber_struct *fiber);
#endif /* INTERNAL_CONT_H */
diff --git a/vm.c b/vm.c
index c2dda3fdc4..4538c8b607 100644
--- a/vm.c
+++ b/vm.c
@@ -3138,8 +3138,7 @@ thread_mark(void *ptr)
RUBY_MARK_UNLESS_NULL(th->top_wrapper);
if (th->root_fiber) rb_fiber_mark_self(th->root_fiber);
- /* Ensure EC stack objects are pinned */
- rb_execution_context_mark(th->ec);
+ RUBY_ASSERT(th->ec == rb_fiberptr_get_ec(th->ec->fiber_ptr));
RUBY_MARK_UNLESS_NULL(th->stat_insn_usage);
RUBY_MARK_UNLESS_NULL(th->last_status);
RUBY_MARK_UNLESS_NULL(th->locking_mutex);