AC_CHECK_FUNCS([getenv])
AC_CHECK_FUNCS([gethostbyname])
AC_CHECK_FUNCS([gethostname])
+AC_CHECK_FUNCS([getloadavg])
AC_CHECK_FUNCS([getpagesize])
AC_CHECK_FUNCS([getrusage])
AC_CHECK_FUNCS([getsockname])
threads_park(isAbsolute, time);
}
+
+/*
+ * Class: sun/misc/Unsafe
+ * Method: getLoadAverage
+ * Signature: ([DI)I
+ */
+JNIEXPORT jint JNICALL Java_sun_misc_Unsafe_getLoadAverage(JNIEnv *env, jobject _this, jdoubleArray loadavg, jint nelem)
+{
+ DoubleArray da(loadavg);
+
+#define MAX_SAMPLES 3
+
+ // Check the passed number of samples.
+ if ((nelem < 0) || (nelem > da.get_length()) || nelem > MAX_SAMPLES) {
+ exceptions_throw_arrayindexoutofboundsexception();
+ return -1;
+ }
+
+ // Actually retrieve samples.
+ double values[MAX_SAMPLES];
+ int result = os::getloadavg(values, nelem);
+
+ // Save samples into the given array.
+ for (int i = 0; i < result; i++) {
+ da.set_element(i, values[i]);
+ }
+
+ return result;
+}
+
} // extern "C"
{ (char*) "putOrderedLong", (char*) "(Ljava/lang/Object;JJ)V", (void*) (uintptr_t) &Java_sun_misc_Unsafe_putOrderedLong },
{ (char*) "unpark", (char*) "(Ljava/lang/Object;)V", (void*) (uintptr_t) &Java_sun_misc_Unsafe_unpark },
{ (char*) "park", (char*) "(ZJ)V", (void*) (uintptr_t) &Java_sun_misc_Unsafe_park },
+ { (char*) "getLoadAverage", (char*) "([DI)I", (void*) (uintptr_t) &Java_sun_misc_Unsafe_getLoadAverage },
};
static inline void free(void* ptr);
static inline char* getenv(const char* name);
static inline int gethostname(char* name, size_t len);
+ static inline int getloadavg(double loadavg[], int nelem);
static inline int getpagesize(void);
static inline int getsockname(int s, struct sockaddr* name, socklen_t* namelen);
static inline int getsockopt(int s, int level, int optname, void* optval, socklen_t* optlen);
#endif
}
+inline int os::getloadavg(double loadavg[], int nelem)
+{
+#if defined(HAVE_GETLOADAVG)
+ return ::getloadavg(loadavg, nelem);
+#else
+# error getloadavg not available
+#endif
+}
+
inline int os::getpagesize(void)
{
#if defined(HAVE_GETPAGESIZE)