ruby-changes:4135
From: ko1@a...
Date: Thu, 28 Feb 2008 13:52:19 +0900 (JST)
Subject: [ruby-changes:4135] nobu - Ruby:r15625 (trunk): * eval.c (stack_check): made flag per threads.
nobu 2008-02-28 13:52:01 +0900 (Thu, 28 Feb 2008)
New Revision: 15625
Modified files:
trunk/ChangeLog
trunk/eval.c
trunk/eval_intern.h
trunk/thread.c
Log:
* eval.c (stack_check): made flag per threads.
* thread.c (rb_thread_set_raised, rb_thread_reset_raised): prefixed.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15625&r2=15624&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/thread.c?r1=15625&r2=15624&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/eval.c?r1=15625&r2=15624&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/eval_intern.h?r1=15625&r2=15624&diff_format=u
Index: eval_intern.h
===================================================================
--- eval_intern.h (revision 15624)
+++ eval_intern.h (revision 15625)
@@ -195,8 +195,16 @@
void rb_thread_cleanup(void);
void rb_thread_wait_other_threads(void);
-int thread_set_raised(rb_thread_t *th);
-int thread_reset_raised(rb_thread_t *th);
+#define RAISED_EXCEPTION 1
+#define RAISED_STACKOVERFLOW 2
+int rb_thread_set_raised(rb_thread_t *th);
+int rb_thread_reset_raised(rb_thread_t *th);
+#define rb_thread_set_stack_overflow(th) \
+ ((th)->raised_flag |= RAISED_STACKOVERFLOW)
+#define rb_thread_reset_stack_overflow(th) \
+ ((th)->raised_flag &= ~RAISED_STACKOVERFLOW)
+#define rb_thread_stack_overflowing_p(th) \
+ (((th)->raised_flag & RAISED_STACKOVERFLOW) != 0)
VALUE rb_f_eval(int argc, VALUE *argv, VALUE self);
VALUE rb_make_exception(int argc, VALUE *argv);
Index: ChangeLog
===================================================================
--- ChangeLog (revision 15624)
+++ ChangeLog (revision 15625)
@@ -1,3 +1,9 @@
+Thu Feb 28 13:51:59 2008 Nobuyoshi Nakada <nobu@r...>
+
+ * eval.c (stack_check): made flag per threads.
+
+ * thread.c (rb_thread_set_raised, rb_thread_reset_raised): prefixed.
+
Thu Feb 28 11:43:56 2008 Nobuyoshi Nakada <nobu@r...>
* file.c (rb_file_flock): immediately returns on EAGAIN if
Index: thread.c
===================================================================
--- thread.c (revision 15624)
+++ thread.c (revision 15625)
@@ -845,22 +845,22 @@
}
int
-thread_set_raised(rb_thread_t *th)
+rb_thread_set_raised(rb_thread_t *th)
{
- if (th->raised_flag) {
+ if (th->raised_flag & RAISED_EXCEPTION) {
return 1;
}
- th->raised_flag = 1;
+ th->raised_flag |= RAISED_EXCEPTION;
return 0;
}
int
-thread_reset_raised(rb_thread_t *th)
+rb_thread_reset_raised(rb_thread_t *th)
{
- if (th->raised_flag == 0) {
+ if (!(th->raised_flag & RAISED_EXCEPTION)) {
return 0;
}
- th->raised_flag = 0;
+ th->raised_flag &= ~RAISED_EXCEPTION;
return 1;
}
@@ -3005,7 +3005,7 @@
th->tracing = 1;
}
- raised = thread_reset_raised(th);
+ raised = rb_thread_reset_raised(th);
PUSH_TAG();
if ((state = EXEC_TAG()) == 0) {
@@ -3013,7 +3013,7 @@
}
if (raised) {
- thread_set_raised(th);
+ rb_thread_set_raised(th);
}
POP_TAG();
Index: eval.c
===================================================================
--- eval.c (revision 15624)
+++ eval.c (revision 15625)
@@ -656,7 +656,7 @@
const char *file;
int line = 0;
- if (thread_set_raised(th)) {
+ if (rb_thread_set_raised(th)) {
th->errinfo = exception_error;
JUMP_TAG(TAG_FATAL);
}
@@ -703,7 +703,7 @@
th->errinfo = mesg;
}
else if (status) {
- thread_reset_raised(th);
+ rb_thread_reset_raised(th);
JUMP_TAG(status);
}
}
@@ -715,7 +715,7 @@
0 /* TODO: id */, 0 /* TODO: klass */);
}
- thread_reset_raised(th);
+ rb_thread_reset_raised(th);
JUMP_TAG(tag);
}
@@ -1241,17 +1241,17 @@
static inline void
stack_check(void)
{
- static int overflowing = 0;
+ rb_thread_t *th = GET_THREAD();
- if (!overflowing && ruby_stack_check()) {
+ if (!rb_thread_stack_overflowing_p(th) && ruby_stack_check()) {
int state;
- overflowing = 1;
+ rb_thread_set_stack_overflow(th);
PUSH_TAG();
if ((state = EXEC_TAG()) == 0) {
rb_exc_raise(sysstack_error);
}
POP_TAG();
- overflowing = 0;
+ rb_thread_reset_stack_overflow(th);
JUMP_TAG(state);
}
}
@@ -1427,6 +1427,8 @@
}
}
+ stack_check();
+
{
VALUE val;
/*
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/