aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2002-12-31 17:43:47 +0000
committerTom Tromey <tromey@gcc.gnu.org>2002-12-31 17:43:47 +0000
commit35a94bdca88f0afa5f6922afbf8d17f5ff908466 (patch)
tree7796256b482af303f3dd8700910237614d8d6601 /libjava
parent731e8b3886f14b9abc61d0e0745cc4c02bc5e481 (diff)
downloadgcc-35a94bdca88f0afa5f6922afbf8d17f5ff908466.zip
gcc-35a94bdca88f0afa5f6922afbf8d17f5ff908466.tar.gz
gcc-35a94bdca88f0afa5f6922afbf8d17f5ff908466.tar.bz2
re PR libgcj/8997 (spin() calls Thread.sleep)
2002-12-31 Tom Tromey <tromey@redhat.com> Ranjit Mathew <rmathew@hotmail.com> Fix for PR libgcj/8997: * java/lang/natObject.cc (spin): Use _Jv_platform_usleep. Include platform.h. * include/posix.h (_Jv_platform_usleep): New function. * include/win32.h (_Jv_platform_usleep): New function. Co-Authored-By: Ranjit Mathew <rmathew@hotmail.com> From-SVN: r60700
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog9
-rw-r--r--libjava/include/posix.h6
-rw-r--r--libjava/include/win32.h13
-rw-r--r--libjava/java/lang/natObject.cc6
4 files changed, 32 insertions, 2 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index ae32ff1..2644aee 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,12 @@
+2002-12-31 Tom Tromey <tromey@redhat.com>
+ Ranjit Mathew <rmathew@hotmail.com>
+
+ Fix for PR libgcj/8997:
+ * java/lang/natObject.cc (spin): Use _Jv_platform_usleep.
+ Include platform.h.
+ * include/posix.h (_Jv_platform_usleep): New function.
+ * include/win32.h (_Jv_platform_usleep): New function.
+
2002-12-29 Tom Tromey <tromey@redhat.com>
* gcj/javaprims.h: Updated.
diff --git a/libjava/include/posix.h b/libjava/include/posix.h
index cdcdb5d..859db6e 100644
--- a/libjava/include/posix.h
+++ b/libjava/include/posix.h
@@ -60,6 +60,12 @@ _Jv_platform_close_on_exec (jint fd)
::fcntl (fd, F_SETFD, FD_CLOEXEC);
}
+inline void
+_Jv_platform_usleep (unsigned long usecs)
+{
+ usleep (usecs);
+}
+
#ifndef DISABLE_JAVA_NET
#ifndef HAVE_SOCKLEN_T
diff --git a/libjava/include/win32.h b/libjava/include/win32.h
index d4c0ab6..8ba6ef2 100644
--- a/libjava/include/win32.h
+++ b/libjava/include/win32.h
@@ -48,6 +48,19 @@ _Jv_platform_close_on_exec (jint)
// Ignore.
}
+/* Suspends the execution of the current thread for the specified
+ number of microseconds. Tries to emulate the behaviour of usleep()
+ on UNIX and provides a granularity of 1 millisecond. */
+inline void
+_Jv_platform_usleep (unsigned long usecs)
+{
+ if (usecs > 0UL)
+ {
+ unsigned long millis = ((usecs + 999UL) / 1000UL);
+ Sleep (millis);
+ }
+}
+
#ifndef DISABLE_JAVA_NET
static inline int
diff --git a/libjava/java/lang/natObject.cc b/libjava/java/lang/natObject.cc
index 4c2fd6c..a050baa 100644
--- a/libjava/java/lang/natObject.cc
+++ b/libjava/java/lang/natObject.cc
@@ -1,6 +1,6 @@
// natObject.cc - Implementation of the Object class.
-/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation
This file is part of libgcj.
@@ -28,6 +28,8 @@ details. */
#include <java/lang/Cloneable.h>
#include <java/lang/Thread.h>
+#include "platform.h"
+
#ifdef LOCK_DEBUG
# include <stdio.h>
#endif
@@ -532,7 +534,7 @@ spin(unsigned n)
unsigned duration = MIN_SLEEP_USECS << (n - yield_limit);
if (n >= 15 + yield_limit || duration > MAX_SLEEP_USECS)
duration = MAX_SLEEP_USECS;
- java::lang::Thread::sleep(0, duration);
+ _Jv_platform_usleep(duration);
}
}