summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-01-05 03:50:04 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-01-05 03:50:04 +0000
commit5e51e94304a30446108752829639247da23873ca (patch)
tree84dfaa93df999e41180776b07dc3ca9046a568fe /eval.c
parent3be3c95ca0611e906c2aa5a23f067c646fa044a1 (diff)
* 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/trunk@7728 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index b4e3ea96b7..7884297c32 100644
--- a/eval.c
+++ b/eval.c
@@ -11698,10 +11698,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);
}