aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-05-30 00:14:34 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-05-30 00:14:34 +0000
commitbfb66a15e94963fdb86301fa3d438ea711855fc4 (patch)
treea2ad3d5a0a47e66cfca8bc13d86cda3b15cd1b08
parent4a3a694ca9059bf37b052f1d886cf71f99b480bf (diff)
downloadruby-bfb66a15e94963fdb86301fa3d438ea711855fc4.tar.gz
cont.c: Check ruby_current_thread
* cont.c (cont_free): check if ruby_current_thread is still valid. [Fix GH-914] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--cont.c7
2 files changed, 8 insertions, 4 deletions
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 <scott.francis@shopify.com>
+
+ * cont.c (cont_free): check if ruby_current_thread is still valid.
+ [Fix GH-914]
+
Sat May 30 08:36:04 2015 Eric Wong <e@80x24.org>
* 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");