summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-11-19 04:58:09 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-11-19 04:58:09 +0000
commitfba998af1b17e852325c14cd0eaabed7beafb0fb (patch)
tree5a94fed5e441970a8761231b0e5acb790fc3ac5c /eval.c
parent3cff13cb2c8df5072edc90f99cf1631a0e5b86a5 (diff)
* parse.y (parse_regx): should raise error on untermitated
expression interpolation. * pack.c (pack_unpack): should give length to utf8_to_uv(). * pack.c (utf8_to_uv): add length check. * eval.c (rb_thread_wait_for): select may cause ERESTART on Solaris. * eval.c (rb_thread_select): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/eval.c b/eval.c
index 8f91a4b158..dce22a3cf1 100644
--- a/eval.c
+++ b/eval.c
@@ -7573,6 +7573,9 @@ rb_thread_schedule()
if (n < 0) {
if (rb_trap_pending) rb_trap_exec();
if (errno == EINTR) goto again;
+#ifdef ERESTART
+ if (erestart == ERESTART) goto again;
+#endif
FOREACH_THREAD_FROM(curr, th) {
if (th->wait_for & WAIT_SELECT) {
int v = 0;
@@ -7730,6 +7733,9 @@ rb_thread_wait_for(time)
if (n < 0) {
switch (errno) {
case EINTR:
+#ifdef ERESTART
+ case ERESTART:
+#endif
return;
default:
rb_sys_fail("sleep");
@@ -7801,14 +7807,21 @@ rb_thread_select(max, read, write, except, timeout)
TRAP_BEG;
n = select(max, read, write, except, tvp);
TRAP_END;
- if (n < 0 && errno == EINTR) {
- if (timeout) {
- double d = timeofday() - limit;
+ switch (errno) {
+ case EINTR:
+#ifdef ERESTART
+ case ERESTART:
+#endif
+ if (timeout) {
+ double d = timeofday() - limit;
- tv.tv_sec = (unsigned int)d;
- tv.tv_usec = (long)((d-(double)tv.tv_sec)*1e6);
+ tv.tv_sec = (unsigned int)d;
+ tv.tv_usec = (long)((d-(double)tv.tv_sec)*1e6);
+ }
+ continue;
+ default:
+ break;
}
- continue;
}
return n;
}
@@ -7817,8 +7830,14 @@ rb_thread_select(max, read, write, except, timeout)
TRAP_BEG;
n = select(max, read, write, except, timeout);
TRAP_END;
- if (n < 0 && errno == EINTR) {
- continue;
+ if (n < 0) {
+ switch (errno) {
+ case EINTR:
+#ifdef ERESTART
+ case ERESTART:
+#endif
+ continue;
+ }
}
return n;
}