diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-11-19 04:58:09 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-11-19 04:58:09 +0000 |
commit | fba998af1b17e852325c14cd0eaabed7beafb0fb (patch) | |
tree | 5a94fed5e441970a8761231b0e5acb790fc3ac5c /eval.c | |
parent | 3cff13cb2c8df5072edc90f99cf1631a0e5b86a5 (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.c | 35 |
1 files changed, 27 insertions, 8 deletions
@@ -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; } |