summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-12-24 19:38:15 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-12-24 19:38:15 +0000
commitcecdab3bf0e8b03cfdccb20fb5ae82c31fae623b (patch)
tree0df92d73d148a2e8d3baaca324a12cde372d844f /eval.c
parent060f19e92c9b8978b36435f73ca45eefa48b2cbc (diff)
* configure.in: check for nanosleep, -lrt if required.
[ruby-core:02059] * eval.c (thread_timer): use select(2) if nanosleep(2) is not available. * eval.c: check __stub_getcontext for glibc on some platforms. [ruby-list:38984] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5286 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/eval.c b/eval.c
index 9a6d342e43..839c0c0dd3 100644
--- a/eval.c
+++ b/eval.c
@@ -29,7 +29,7 @@
#endif
#include <stdio.h>
-#if defined(HAVE_UCONTEXT_H) && (defined(__ia64__) || defined(HAVE_NATIVETHREAD))
+#if defined(HAVE_UCONTEXT_H) && (defined(__ia64__) || defined(HAVE_NATIVETHREAD)) && !defined(__stub_getcontext)
#include <ucontext.h>
#define USE_CONTEXT
#else
@@ -9552,12 +9552,19 @@ static void*
thread_timer(dummy)
void *dummy;
{
- struct timespec req, rem;
-
for (;;) {
+#ifdef HAVE_NANOSLEEP
+ struct timespec req, rem;
+
req.tv_sec = 0;
req.tv_nsec = 10000000;
nanosleep(&req, &rem);
+#else
+ struct timeval tv;
+ tv.tv_sec = 0;
+ tv.tv_usec = 10000;
+ select(0, NULL, NULL, NULL, &tv);
+#endif
if (!rb_thread_critical) {
rb_thread_pending = 1;
if (rb_trap_immediate) {