From 23409989edec7b345dd23c289f1e0c4fe28fdc4f Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 5 Jan 2005 03:50:04 +0000 Subject: * eval.c (rb_thread_initialize): Thread objects cannot be initialized again. fixed: [ruby-core:04067] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7728 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ eval.c | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 02698e5a25..37d184bb4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Jan 5 12:49:39 2005 Nobuyoshi Nakada + + * eval.c (rb_thread_initialize): Thread objects cannot be initialized + again. fixed: [ruby-core:04067] + Wed Jan 5 10:48:16 2005 NAKAMURA Usaku * dir.c (dir_s_mkdir): win32 special processing doesn't need any diff --git a/eval.c b/eval.c index eb0fa3873b..3f0dec822a 100644 --- a/eval.c +++ b/eval.c @@ -11567,10 +11567,21 @@ static VALUE rb_thread_initialize(thread, args) VALUE thread, args; { + rb_thread_t th; + if (!rb_block_given_p()) { rb_raise(rb_eThreadError, "must be called with a block"); } - return rb_thread_start_0(rb_thread_yield, args, rb_thread_check(thread)); + th = rb_thread_check(thread); + if (th->stk_max) { + NODE *node = th->node; + if (!node) { + rb_raise(rb_eThreadError, "already initialized thread"); + } + rb_raise(rb_eThreadError, "already initialized thread - %s:%d", + node->nd_file, nd_line(node)); + } + return rb_thread_start_0(rb_thread_yield, args, th); } -- cgit v1.2.3