mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* thread.c (rb_thread_wait_for): wait until timed out only when
sleeping with timeout. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a0e291f697
commit
7ad9faa528
2 changed files with 29 additions and 24 deletions
|
@ -1,3 +1,8 @@
|
|||
Thu Jul 10 12:09:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* thread.c (rb_thread_wait_for): wait until timed out only when
|
||||
sleeping with timeout.
|
||||
|
||||
Wed Jul 9 22:41:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* thread.c (sleep_timeval): wait until timed out. [ruby-core:17270]
|
||||
|
|
44
thread.c
44
thread.c
|
@ -736,29 +736,7 @@ getclockofday(struct timeval *tp)
|
|||
static void
|
||||
sleep_timeval(rb_thread_t *th, struct timeval tv)
|
||||
{
|
||||
struct timeval to, tvn;
|
||||
|
||||
getclockofday(&to);
|
||||
to.tv_sec += tv.tv_sec;
|
||||
if ((to.tv_usec += tv.tv_usec) >= 1000000) {
|
||||
to.tv_sec++;
|
||||
to.tv_usec -= 1000000;
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
native_sleep(th, &tv, 0);
|
||||
getclockofday(&tvn);
|
||||
if (to.tv_sec < tvn.tv_sec) break;
|
||||
if (to.tv_sec == tvn.tv_sec && to.tv_usec <= tvn.tv_usec) break;
|
||||
thread_debug("sleep_timeval: %ld.%.6ld > %ld.%.6ld\n",
|
||||
(long)to.tv_sec, to.tv_usec,
|
||||
(long)tvn.tv_sec, tvn.tv_usec);
|
||||
tv.tv_sec = to.tv_sec - tvn.tv_sec;
|
||||
if ((tv.tv_usec = to.tv_usec - tvn.tv_usec) < 0) {
|
||||
--tv.tv_sec;
|
||||
tv.tv_usec += 1000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -811,7 +789,29 @@ void
|
|||
rb_thread_wait_for(struct timeval time)
|
||||
{
|
||||
rb_thread_t *th = GET_THREAD();
|
||||
struct timeval to, tvn;
|
||||
|
||||
getclockofday(&to);
|
||||
to.tv_sec += tv.tv_sec;
|
||||
if ((to.tv_usec += tv.tv_usec) >= 1000000) {
|
||||
to.tv_sec++;
|
||||
to.tv_usec -= 1000000;
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
sleep_timeval(th, time);
|
||||
getclockofday(&tvn);
|
||||
if (to.tv_sec < tvn.tv_sec) break;
|
||||
if (to.tv_sec == tvn.tv_sec && to.tv_usec <= tvn.tv_usec) break;
|
||||
thread_debug("sleep_timeval: %ld.%.6ld > %ld.%.6ld\n",
|
||||
(long)to.tv_sec, to.tv_usec,
|
||||
(long)tvn.tv_sec, tvn.tv_usec);
|
||||
tv.tv_sec = to.tv_sec - tvn.tv_sec;
|
||||
if ((tv.tv_usec = to.tv_usec - tvn.tv_usec) < 0) {
|
||||
--tv.tv_sec;
|
||||
tv.tv_usec += 1000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in a new issue