diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2019-06-05 18:23:04 +1200 |
---|---|---|
committer | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2019-06-19 20:39:10 +1200 |
commit | 38791145ebc6890b97ea55ee490084c63b67f3cc (patch) | |
tree | 8f5e77f663df93c1ae69ea4aeba0d4b7b3ac79fb /cont.c | |
parent | 7c7a1c221281cdba1f48d5e42ee2f9af306d27f8 (diff) | |
download | ruby-38791145ebc6890b97ea55ee490084c63b67f3cc.tar.gz |
Better handling of root fiber.
Diffstat (limited to 'cont.c')
-rw-r--r-- | cont.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -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. */ } |