From e407f42fb8e99b3e1f6b0f360452b3f8128ae976 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 12 Nov 2009 04:57:39 +0000 Subject: * thread.c (thread_create_core): moved failure handling from native_thread_core(). git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- thread.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'thread.c') diff --git a/thread.c b/thread.c index 11d3ed633..5bca3e32a 100644 --- a/thread.c +++ b/thread.c @@ -512,6 +512,7 @@ static VALUE thread_create_core(VALUE thval, VALUE args, VALUE (*fn)(ANYARGS)) { rb_thread_t *th; + int err; if (OBJ_FROZEN(GET_THREAD()->thgroup)) { rb_raise(rb_eThreadError, @@ -530,7 +531,12 @@ thread_create_core(VALUE thval, VALUE args, VALUE (*fn)(ANYARGS)) native_mutex_initialize(&th->interrupt_lock); /* kick thread */ st_insert(th->vm->living_threads, thval, (st_data_t) th->thread_id); - native_thread_create(th); + err = native_thread_create(th); + if (err) { + st_delete_wrap(th->vm->living_threads, th->self); + th->status = THREAD_KILLED; + rb_raise(rb_eThreadError, "can't create Thread (%d)", err); + } return thval; } -- cgit