summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-05-31 03:10:07 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-05-31 03:10:07 +0000
commit9a8a22cd0fb59c99c69b11a130a30066624c9d13 (patch)
tree813d68b48b4967d5f0e0fadc8e9386cb49a5e85a /eval.c
parent4a1e525537077b198e8be1a2560963f80a723cca (diff)
downloadruby-9a8a22cd0fb59c99c69b11a130a30066624c9d13.tar.gz
ruby-9a8a22cd0fb59c99c69b11a130a30066624c9d13.tar.xz
ruby-9a8a22cd0fb59c99c69b11a130a30066624c9d13.zip
2000-05-31
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@719 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/eval.c b/eval.c
index abf439601..0a92e4615 100644
--- a/eval.c
+++ b/eval.c
@@ -6635,6 +6635,9 @@ rb_thread_fd_close(fd)
static void
rb_thread_deadlock()
{
+ if (curr_thread == main_thread) {
+ rb_raise(rb_eFatal, "Thread: deadlock");
+ }
curr_thread = main_thread;
th_raise_argc = 1;
th_raise_argv[0] = rb_exc_new2(rb_eFatal, "Thread: deadlock");
@@ -6877,17 +6880,17 @@ rb_thread_schedule()
curr_thread->file = ruby_sourcefile;
curr_thread->line = ruby_sourceline;
FOREACH_THREAD_FROM(curr, th) {
- fprintf(stderr, "deadlock 0x%lx: %d:%d %s - %s:%d:\n",
+ fprintf(stderr, "deadlock 0x%lx: %d:%d %s - %s:%d\n",
th->thread, th->status,
th->wait_for, th==main_thread?"(main)":"",
th->file, th->line);
}
END_FOREACH_FROM(curr, th);
- rb_thread_deadlock();
next = main_thread;
- rb_thread_ready(next);
next->gid = 0;
+ rb_thread_ready(next);
next->status = THREAD_TO_KILL;
+ rb_thread_deadlock();
}
if (next->status == THREAD_RUNNABLE && next == curr_thread) {
return;