summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cont.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/cont.c b/cont.c
index 096873f280..6d51e0a285 100644
--- a/cont.c
+++ b/cont.c
@@ -750,6 +750,7 @@ fiber_set_stack_location(void)
th->ec->machine.stack_start = (void*)(((VALUE)ptr & RB_PAGE_MASK) + STACK_UPPER((void *)&ptr, 0, RB_PAGE_SIZE));
}
+NORETURN(static VOID CALLBACK fiber_entry(void *arg));
static VOID CALLBACK
fiber_entry(void *arg)
{
@@ -758,6 +759,13 @@ fiber_entry(void *arg)
}
#else /* _WIN32 */
+NORETURN(static void fiber_entry(void *arg));
+static void
+fiber_entry(void *arg)
+{
+ rb_fiber_start();
+}
+
/*
* FreeBSD require a first (i.e. addr) argument of mmap(2) is not NULL
* if MAP_STACK is passed.
@@ -841,7 +849,7 @@ fiber_initialize_machine_stack_context(rb_fiber_t *fib, size_t size)
context->uc_stack.ss_size = size;
fib->ss_sp = ptr;
fib->ss_size = size;
- makecontext(context, rb_fiber_start, 0);
+ makecontext(context, fiber_entry, 0);
sec->machine.stack_start = (VALUE*)(ptr + STACK_DIR_UPPER(0, size));
sec->machine.stack_maxsize = size - RB_PAGE_SIZE;
#endif