summaryrefslogtreecommitdiff
path: root/cont.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-05 18:23:04 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-19 20:39:10 +1200
commit38791145ebc6890b97ea55ee490084c63b67f3cc (patch)
tree8f5e77f663df93c1ae69ea4aeba0d4b7b3ac79fb /cont.c
parent7c7a1c221281cdba1f48d5e42ee2f9af306d27f8 (diff)
Better handling of root fiber.
Diffstat (limited to 'cont.c')
-rw-r--r--cont.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/cont.c b/cont.c
index 88f9b0682c..b71af51f1f 100644
--- a/cont.c
+++ b/cont.c
@@ -420,10 +420,7 @@ cont_free(void *ptr)
rb_fiber_t *fib = (rb_fiber_t*)cont;
#if defined(FIBER_USE_COROUTINE)
coroutine_destroy(&fib->context);
- if (fib->ss_sp != NULL) {
- if (fiber_is_root_p(fib)) {
- rb_bug("Illegal root fiber parameter");
- }
+ if (fib->ss_sp != NULL && !fiber_is_root_p(fib)) {
#ifdef _WIN32
VirtualFree((void*)fib->ss_sp, 0, MEM_RELEASE);
#else
@@ -1661,6 +1658,8 @@ rb_threadptr_root_fiber_setup(rb_thread_t *th)
fiber_status_set(fib, FIBER_RESUMED); /* skip CREATED */
th->ec = &fib->cont.saved_ec;
+ th->root_fiber = fib;
+
/* NOTE: On WIN32, fib_handle is not allocated yet. */
}