summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-02-15 07:31:51 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-02-15 07:31:51 +0000
commit51fa86ece2d2b0f72c86c70fe1314e412c7a9e68 (patch)
tree86cdfce906bcc995c55e83a907f9d9f7be071da0 /eval.c
parent42c802126215101feed36135ba8f9601895ec03a (diff)
990215
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_3@402 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c38
1 files changed, 7 insertions, 31 deletions
diff --git a/eval.c b/eval.c
index 9246d6267a..7e1e6c74e1 100644
--- a/eval.c
+++ b/eval.c
@@ -6104,44 +6104,20 @@ rb_thread_fd_close(fd)
}
static void
-rb_thread_badf()
-{
- thread_t th;
- int max;
- struct timeval delay_tv;
- fd_set readfds;
-
- delay_tv.tv_sec = 0;
- delay_tv.tv_usec = 0;
- FOREACH_THREAD(th) {
- if (th->wait_for & WAIT_FD) {
- FD_ZERO(&readfds);
- FD_SET(th->fd, &readfds);
- if (select(th->fd+1, &readfds, 0, 0, &delay_tv) < 0 &&
- errno == EBADF) {
- rb_thread_ready(th);
- th->status = THREAD_TO_KILL;
- }
- }
- }
- END_FOREACH(th);
-}
-
-static void
rb_thread_deadlock()
{
- static int invoked = 0;
-
- if (invoked) return;
- invoked = 1;
+#if 1
curr_thread = main_thread;
-#if 0
th_raise_argc = 1;
th_raise_argv[0] = rb_exc_new2(rb_eFatal, "Thread: deadlock");
th_raise_file = ruby_sourcefile;
th_raise_line = ruby_sourceline;
rb_thread_restore_context(main_thread, RESTORE_RAISE);
#else
+ static int invoked = 0;
+
+ if (invoked) return;
+ invoked = 1;
rb_prohibit_interrupt = 1;
ruby_errinfo = rb_exc_new2(rb_eFatal, "Thread: deadlock");
set_backtrace(ruby_errinfo, make_backtrace());
@@ -6250,7 +6226,6 @@ rb_thread_schedule()
if (rb_trap_pending) rb_trap_exec();
switch (errno) {
case EBADF:
- rb_thread_badf();
case ENOMEM:
n = 0;
break;
@@ -6775,6 +6750,7 @@ rb_thread_create_0(fn, arg, klass)
VALUE klass;
{
thread_t th = rb_thread_alloc(klass);
+ volatile VALUE thread = th->thread;
enum thread_status status;
int state;
@@ -6794,7 +6770,7 @@ rb_thread_create_0(fn, arg, klass)
FL_SET(ruby_scope, SCOPE_SHARED);
rb_thread_save_context(curr_thread);
if (setjmp(curr_thread->context)) {
- return th->thread;
+ return thread;
}
PUSH_TAG(PROT_THREAD);