diff --git a/ChangeLog b/ChangeLog index c8d45266f5..9a2ff24ffd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat May 30 09:14:28 2015 Scott Francis + + * cont.c (cont_free): check if ruby_current_thread is still valid. + [Fix GH-914] + Sat May 30 08:36:04 2015 Eric Wong * variable.c (static int special_generic_ivar): move diff --git a/cont.c b/cont.c index 22e0c5abe0..703007dc8b 100644 --- a/cont.c +++ b/cont.c @@ -236,17 +236,16 @@ cont_free(void *ptr) else { /* fiber */ rb_fiber_t *fib = (rb_fiber_t*)cont; + const rb_thread_t *const th = GET_THREAD(); #ifdef _WIN32 - if (GET_THREAD()->fiber != fib && cont->type != ROOT_FIBER_CONTEXT) { + if (th && th->fiber != fib && cont->type != ROOT_FIBER_CONTEXT) { /* don't delete root fiber handle */ - rb_fiber_t *fib = (rb_fiber_t*)cont; if (fib->fib_handle) { DeleteFiber(fib->fib_handle); } } #else /* not WIN32 */ - if (GET_THREAD()->fiber != fib) { - rb_fiber_t *fib = (rb_fiber_t*)cont; + if (th && th->fiber != fib) { if (fib->ss_sp) { if (cont->type == ROOT_FIBER_CONTEXT) { rb_bug("Illegal root fiber parameter");