--- a/hotspot/make/jprt.properties Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/make/jprt.properties Mon Mar 24 11:25:32 2014 +0100
@@ -33,7 +33,7 @@
# This tells jprt what default release we want to build
-jprt.hotspot.default.release=jdk8
+jprt.hotspot.default.release=jdk9
jprt.tools.default.release=${jprt.submit.option.release?${jprt.submit.option.release}:${jprt.hotspot.default.release}}
@@ -47,72 +47,50 @@
# sparc etc.
# Define the Solaris platforms we want for the various releases
-jprt.my.solaris.sparcv9.jdk8=solaris_sparcv9_5.10
-jprt.my.solaris.sparcv9.jdk7=solaris_sparcv9_5.10
-jprt.my.solaris.sparcv9.jdk7u8=${jprt.my.solaris.sparcv9.jdk7}
+jprt.my.solaris.sparcv9.jdk9=solaris_sparcv9_5.10
jprt.my.solaris.sparcv9=${jprt.my.solaris.sparcv9.${jprt.tools.default.release}}
-jprt.my.solaris.x64.jdk8=solaris_x64_5.10
-jprt.my.solaris.x64.jdk7=solaris_x64_5.10
-jprt.my.solaris.x64.jdk7u8=${jprt.my.solaris.x64.jdk7}
+jprt.my.solaris.x64.jdk9=solaris_x64_5.10
jprt.my.solaris.x64=${jprt.my.solaris.x64.${jprt.tools.default.release}}
-jprt.my.linux.i586.jdk8=linux_i586_2.6
-jprt.my.linux.i586.jdk7=linux_i586_2.6
-jprt.my.linux.i586.jdk7u8=${jprt.my.linux.i586.jdk7}
+jprt.my.linux.i586.jdk9=linux_i586_2.6
jprt.my.linux.i586=${jprt.my.linux.i586.${jprt.tools.default.release}}
-jprt.my.linux.x64.jdk8=linux_x64_2.6
-jprt.my.linux.x64.jdk7=linux_x64_2.6
-jprt.my.linux.x64.jdk7u8=${jprt.my.linux.x64.jdk7}
+jprt.my.linux.x64.jdk9=linux_x64_2.6
jprt.my.linux.x64=${jprt.my.linux.x64.${jprt.tools.default.release}}
-jprt.my.linux.ppc.jdk8=linux_ppc_2.6
-jprt.my.linux.ppc.jdk7=linux_ppc_2.6
-jprt.my.linux.ppc.jdk7u8=${jprt.my.linux.ppc.jdk7}
+jprt.my.linux.ppc.jdk9=linux_ppc_2.6
jprt.my.linux.ppc=${jprt.my.linux.ppc.${jprt.tools.default.release}}
-jprt.my.linux.ppcv2.jdk8=linux_ppcv2_2.6
-jprt.my.linux.ppcv2.jdk7=linux_ppcv2_2.6
-jprt.my.linux.ppcv2.jdk7u8=${jprt.my.linux.ppcv2.jdk7}
+jprt.my.linux.ppcv2.jdk9=linux_ppcv2_2.6
jprt.my.linux.ppcv2=${jprt.my.linux.ppcv2.${jprt.tools.default.release}}
-jprt.my.linux.ppcsflt.jdk8=linux_ppcsflt_2.6
-jprt.my.linux.ppcsflt.jdk7=linux_ppcsflt_2.6
-jprt.my.linux.ppcsflt.jdk7u8=${jprt.my.linux.ppcsflt.jdk7}
+jprt.my.linux.ppcsflt.jdk9=linux_ppcsflt_2.6
jprt.my.linux.ppcsflt=${jprt.my.linux.ppcsflt.${jprt.tools.default.release}}
-jprt.my.linux.armvfpsflt.jdk8=linux_armvfpsflt_2.6
+jprt.my.linux.armvfpsflt.jdk9=linux_armvfpsflt_2.6
jprt.my.linux.armvfpsflt=${jprt.my.linux.armvfpsflt.${jprt.tools.default.release}}
-jprt.my.linux.armvfphflt.jdk8=linux_armvfphflt_2.6
+jprt.my.linux.armvfphflt.jdk9=linux_armvfphflt_2.6
jprt.my.linux.armvfphflt=${jprt.my.linux.armvfphflt.${jprt.tools.default.release}}
# The ARM GP vfp-sflt build is not currently supported
-#jprt.my.linux.armvs.jdk8=linux_armvs_2.6
+#jprt.my.linux.armvs.jdk9=linux_armvs_2.6
#jprt.my.linux.armvs=${jprt.my.linux.armvs.${jprt.tools.default.release}}
-jprt.my.linux.armvh.jdk8=linux_armvh_2.6
+jprt.my.linux.armvh.jdk9=linux_armvh_2.6
jprt.my.linux.armvh=${jprt.my.linux.armvh.${jprt.tools.default.release}}
-jprt.my.linux.armsflt.jdk8=linux_armsflt_2.6
-jprt.my.linux.armsflt.jdk7=linux_armsflt_2.6
-jprt.my.linux.armsflt.jdk7u8=${jprt.my.linux.armsflt.jdk7}
+jprt.my.linux.armsflt.jdk9=linux_armsflt_2.6
jprt.my.linux.armsflt=${jprt.my.linux.armsflt.${jprt.tools.default.release}}
-jprt.my.macosx.x64.jdk8=macosx_x64_10.7
-jprt.my.macosx.x64.jdk7=macosx_x64_10.7
-jprt.my.macosx.x64.jdk7u8=${jprt.my.macosx.x64.jdk7}
+jprt.my.macosx.x64.jdk9=macosx_x64_10.7
jprt.my.macosx.x64=${jprt.my.macosx.x64.${jprt.tools.default.release}}
-jprt.my.windows.i586.jdk8=windows_i586_6.1
-jprt.my.windows.i586.jdk7=windows_i586_6.1
-jprt.my.windows.i586.jdk7u8=${jprt.my.windows.i586.jdk7}
+jprt.my.windows.i586.jdk9=windows_i586_6.1
jprt.my.windows.i586=${jprt.my.windows.i586.${jprt.tools.default.release}}
-jprt.my.windows.x64.jdk8=windows_x64_6.1
-jprt.my.windows.x64.jdk7=windows_x64_6.1
-jprt.my.windows.x64.jdk7u8=${jprt.my.windows.x64.jdk7}
+jprt.my.windows.x64.jdk9=windows_x64_6.1
jprt.my.windows.x64=${jprt.my.windows.x64.${jprt.tools.default.release}}
# Standard list of jprt build targets for this source tree
@@ -143,9 +121,7 @@
jprt.build.targets.all=${jprt.build.targets.standard}, \
${jprt.build.targets.embedded}, ${jprt.build.targets.open}
-jprt.build.targets.jdk8=${jprt.build.targets.all}
-jprt.build.targets.jdk7=${jprt.build.targets.all}
-jprt.build.targets.jdk7u8=${jprt.build.targets.all}
+jprt.build.targets.jdk9=${jprt.build.targets.all}
jprt.build.targets=${jprt.build.targets.${jprt.tools.default.release}}
# Subset lists of test targets for this source tree
@@ -349,9 +325,7 @@
${jprt.my.windows.i586.test.targets}, \
${jprt.my.windows.x64.test.targets}
-jprt.test.targets.jdk8=${jprt.test.targets.standard}
-jprt.test.targets.jdk7=${jprt.test.targets.standard}
-jprt.test.targets.jdk7u8=${jprt.test.targets.jdk7}
+jprt.test.targets.jdk9=${jprt.test.targets.standard}
jprt.test.targets=${jprt.test.targets.${jprt.tools.default.release}}
# The default test/Makefile targets that should be run
@@ -399,9 +373,7 @@
jprt.make.rule.test.targets.embedded = \
${jprt.make.rule.test.targets.standard.client}
-jprt.make.rule.test.targets.jdk8=${jprt.make.rule.test.targets.standard}
-jprt.make.rule.test.targets.jdk7=${jprt.make.rule.test.targets.standard}
-jprt.make.rule.test.targets.jdk7u8=${jprt.make.rule.test.targets.jdk7}
+jprt.make.rule.test.targets.jdk9=${jprt.make.rule.test.targets.standard}
jprt.make.rule.test.targets=${jprt.make.rule.test.targets.${jprt.tools.default.release}}
# 7155453: Work-around to prevent popups on OSX from blocking test completion
--- a/hotspot/src/os/aix/vm/os_aix.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/os/aix/vm/os_aix.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -3593,6 +3593,11 @@
tty->print_cr(" found:%s", get_signal_handler_name(thisHandler, buf, O_BUFLEN));
// No need to check this sig any longer
sigaddset(&check_signal_done, sig);
+ // Running under non-interactive shell, SHUTDOWN2_SIGNAL will be reassigned SIG_IGN
+ if (sig == SHUTDOWN2_SIGNAL && !isatty(fileno(stdin))) {
+ tty->print_cr("Running in non-interactive shell, %s handler is replaced by shell",
+ exception_name(sig, buf, O_BUFLEN));
+ }
} else if (os::Aix::get_our_sigflags(sig) != 0 && (int)act.sa_flags != os::Aix::get_our_sigflags(sig)) {
tty->print("Warning: %s handler flags ", exception_name(sig, buf, O_BUFLEN));
tty->print("expected:" PTR32_FORMAT, os::Aix::get_our_sigflags(sig));
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -3374,6 +3374,11 @@
tty->print_cr(" found:%s", get_signal_handler_name(thisHandler, buf, O_BUFLEN));
// No need to check this sig any longer
sigaddset(&check_signal_done, sig);
+ // Running under non-interactive shell, SHUTDOWN2_SIGNAL will be reassigned SIG_IGN
+ if (sig == SHUTDOWN2_SIGNAL && !isatty(fileno(stdin))) {
+ tty->print_cr("Running in non-interactive shell, %s handler is replaced by shell",
+ exception_name(sig, buf, O_BUFLEN));
+ }
} else if(os::Bsd::get_our_sigflags(sig) != 0 && (int)act.sa_flags != os::Bsd::get_our_sigflags(sig)) {
tty->print("Warning: %s handler flags ", exception_name(sig, buf, O_BUFLEN));
tty->print("expected:" PTR32_FORMAT, os::Bsd::get_our_sigflags(sig));
--- a/hotspot/src/os/linux/vm/os_linux.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/os/linux/vm/os_linux.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -4560,6 +4560,11 @@
tty->print_cr(" found:%s", get_signal_handler_name(thisHandler, buf, O_BUFLEN));
// No need to check this sig any longer
sigaddset(&check_signal_done, sig);
+ // Running under non-interactive shell, SHUTDOWN2_SIGNAL will be reassigned SIG_IGN
+ if (sig == SHUTDOWN2_SIGNAL && !isatty(fileno(stdin))) {
+ tty->print_cr("Running in non-interactive shell, %s handler is replaced by shell",
+ exception_name(sig, buf, O_BUFLEN));
+ }
} else if(os::Linux::get_our_sigflags(sig) != 0 && (int)act.sa_flags != os::Linux::get_our_sigflags(sig)) {
tty->print("Warning: %s handler flags ", exception_name(sig, buf, O_BUFLEN));
tty->print("expected:" PTR32_FORMAT, os::Linux::get_our_sigflags(sig));
--- a/hotspot/src/os/solaris/vm/osThread_solaris.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/os/solaris/vm/osThread_solaris.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -41,7 +41,6 @@
_thread_id = 0;
sigemptyset(&_caller_sigmask);
- _saved_interrupt_thread_state = _thread_new;
_vm_created_thread = false;
}
--- a/hotspot/src/os/solaris/vm/osThread_solaris.hpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/os/solaris/vm/osThread_solaris.hpp Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -82,20 +82,6 @@
void set_ucontext(ucontext_t* ptr) { _ucontext = ptr; }
static void SR_handler(Thread* thread, ucontext_t* uc);
- // ***************************************************************
- // java.lang.Thread.interrupt state.
- // ***************************************************************
-
- private:
-
- JavaThreadState _saved_interrupt_thread_state; // the thread state before a system call -- restored afterward
-
- public:
-
-
- JavaThreadState saved_interrupt_thread_state() { return _saved_interrupt_thread_state; }
- void set_saved_interrupt_thread_state(JavaThreadState state) { _saved_interrupt_thread_state = state; }
-
static void handle_spinlock_contention(int tries); // Used for thread local eden locking
// ***************************************************************
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -311,33 +311,6 @@
return localtime_r(clock, res);
}
-// interruptible infrastructure
-
-// setup_interruptible saves the thread state before going into an
-// interruptible system call.
-// The saved state is used to restore the thread to
-// its former state whether or not an interrupt is received.
-// Used by classloader os::read
-// os::restartable_read calls skip this layer and stay in _thread_in_native
-
-void os::Solaris::setup_interruptible(JavaThread* thread) {
-
- JavaThreadState thread_state = thread->thread_state();
-
- assert(thread_state != _thread_blocked, "Coming from the wrong thread");
- assert(thread_state != _thread_in_native, "Native threads skip setup_interruptible");
- OSThread* osthread = thread->osthread();
- osthread->set_saved_interrupt_thread_state(thread_state);
- thread->frame_anchor()->make_walkable(thread);
- ThreadStateTransition::transition(thread, thread_state, _thread_blocked);
-}
-
-JavaThread* os::Solaris::setup_interruptible() {
- JavaThread* thread = (JavaThread*)ThreadLocalStorage::thread();
- setup_interruptible(thread);
- return thread;
-}
-
void os::Solaris::try_enable_extended_io() {
typedef int (*enable_extended_FILE_stdio_t)(int, int);
@@ -353,41 +326,6 @@
}
}
-
-#ifdef ASSERT
-
-JavaThread* os::Solaris::setup_interruptible_native() {
- JavaThread* thread = (JavaThread*)ThreadLocalStorage::thread();
- JavaThreadState thread_state = thread->thread_state();
- assert(thread_state == _thread_in_native, "Assumed thread_in_native");
- return thread;
-}
-
-void os::Solaris::cleanup_interruptible_native(JavaThread* thread) {
- JavaThreadState thread_state = thread->thread_state();
- assert(thread_state == _thread_in_native, "Assumed thread_in_native");
-}
-#endif
-
-// cleanup_interruptible reverses the effects of setup_interruptible
-// setup_interruptible_already_blocked() does not need any cleanup.
-
-void os::Solaris::cleanup_interruptible(JavaThread* thread) {
- OSThread* osthread = thread->osthread();
-
- ThreadStateTransition::transition(thread, _thread_blocked, osthread->saved_interrupt_thread_state());
-}
-
-// I/O interruption related counters called in _INTERRUPTIBLE
-
-void os::Solaris::bump_interrupted_before_count() {
- RuntimeService::record_interrupted_before_count();
-}
-
-void os::Solaris::bump_interrupted_during_count() {
- RuntimeService::record_interrupted_during_count();
-}
-
static int _processors_online = 0;
jint os::Solaris::_os_thread_limit = 0;
@@ -3366,11 +3304,20 @@
// Read calls from inside the vm need to perform state transitions
size_t os::read(int fd, void *buf, unsigned int nBytes) {
- INTERRUPTIBLE_RETURN_INT_VM(::read(fd, buf, nBytes), os::Solaris::clear_interrupted);
+ size_t res;
+ JavaThread* thread = (JavaThread*)Thread::current();
+ assert(thread->thread_state() == _thread_in_vm, "Assumed _thread_in_vm");
+ ThreadBlockInVM tbiv(thread);
+ RESTARTABLE(::read(fd, buf, (size_t) nBytes), res);
+ return res;
}
size_t os::restartable_read(int fd, void *buf, unsigned int nBytes) {
- INTERRUPTIBLE_RETURN_INT(::read(fd, buf, nBytes), os::Solaris::clear_interrupted);
+ size_t res;
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+ RESTARTABLE(::read(fd, buf, (size_t) nBytes), res);
+ return res;
}
void os::naked_short_sleep(jlong ms) {
@@ -4471,6 +4418,11 @@
tty->print_cr(" found:%s", get_signal_handler_name(thisHandler, buf, O_BUFLEN));
// No need to check this sig any longer
sigaddset(&check_signal_done, sig);
+ // Running under non-interactive shell, SHUTDOWN2_SIGNAL will be reassigned SIG_IGN
+ if (sig == SHUTDOWN2_SIGNAL && !isatty(fileno(stdin))) {
+ tty->print_cr("Running in non-interactive shell, %s handler is replaced by shell",
+ exception_name(sig, buf, O_BUFLEN));
+ }
} else if(os::Solaris::get_our_sigflags(sig) != 0 && act.sa_flags != os::Solaris::get_our_sigflags(sig)) {
tty->print("Warning: %s handler flags ", exception_name(sig, buf, O_BUFLEN));
tty->print("expected:" PTR32_FORMAT, os::Solaris::get_our_sigflags(sig));
@@ -5305,6 +5257,8 @@
}
int os::available(int fd, jlong *bytes) {
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
jlong cur, end;
int mode;
struct stat64 buf64;
@@ -5312,14 +5266,9 @@
if (::fstat64(fd, &buf64) >= 0) {
mode = buf64.st_mode;
if (S_ISCHR(mode) || S_ISFIFO(mode) || S_ISSOCK(mode)) {
- /*
- * XXX: is the following call interruptible? If so, this might
- * need to go through the INTERRUPT_IO() wrapper as for other
- * blocking, interruptible calls in this file.
- */
int n,ioctl_return;
- INTERRUPTIBLE(::ioctl(fd, FIONREAD, &n),ioctl_return,os::Solaris::clear_interrupted);
+ RESTARTABLE(::ioctl(fd, FIONREAD, &n), ioctl_return);
if (ioctl_return>= 0) {
*bytes = n;
return 1;
@@ -6250,7 +6199,11 @@
}
size_t os::write(int fd, const void *buf, unsigned int nBytes) {
- INTERRUPTIBLE_RETURN_INT(::write(fd, buf, nBytes), os::Solaris::clear_interrupted);
+ size_t res;
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+ RESTARTABLE((size_t) ::write(fd, buf, (size_t) nBytes), res);
+ return res;
}
int os::close(int fd) {
@@ -6262,11 +6215,15 @@
}
int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
- INTERRUPTIBLE_RETURN_INT((int)::recv(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+ RESTARTABLE_RETURN_INT((int)::recv(fd, buf, nBytes, flags));
}
int os::send(int fd, char* buf, size_t nBytes, uint flags) {
- INTERRUPTIBLE_RETURN_INT((int)::send(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+ RESTARTABLE_RETURN_INT((int)::send(fd, buf, nBytes, flags));
}
int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
@@ -6287,11 +6244,14 @@
pfd.fd = fd;
pfd.events = POLLIN;
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+
gettimeofday(&t, &aNull);
prevtime = ((julong)t.tv_sec * 1000) + t.tv_usec / 1000;
for(;;) {
- INTERRUPTIBLE_NORESTART(::poll(&pfd, 1, timeout), res, os::Solaris::clear_interrupted);
+ res = ::poll(&pfd, 1, timeout);
if(res == OS_ERR && errno == EINTR) {
if(timeout != -1) {
gettimeofday(&t, &aNull);
@@ -6307,17 +6267,30 @@
int os::connect(int fd, struct sockaddr *him, socklen_t len) {
int _result;
- INTERRUPTIBLE_NORESTART(::connect(fd, him, len), _result,\
- os::Solaris::clear_interrupted);
-
- // Depending on when thread interruption is reset, _result could be
- // one of two values when errno == EINTR
-
- if (((_result == OS_INTRPT) || (_result == OS_ERR))
- && (errno == EINTR)) {
+ _result = ::connect(fd, him, len);
+
+ // On Solaris, when a connect() call is interrupted, the connection
+ // can be established asynchronously (see 6343810). Subsequent calls
+ // to connect() must check the errno value which has the semantic
+ // described below (copied from the connect() man page). Handling
+ // of asynchronously established connections is required for both
+ // blocking and non-blocking sockets.
+ // EINTR The connection attempt was interrupted
+ // before any data arrived by the delivery of
+ // a signal. The connection, however, will be
+ // established asynchronously.
+ //
+ // EINPROGRESS The socket is non-blocking, and the connec-
+ // tion cannot be completed immediately.
+ //
+ // EALREADY The socket is non-blocking, and a previous
+ // connection attempt has not yet been com-
+ // pleted.
+ //
+ // EISCONN The socket is already connected.
+ if (_result == OS_ERR && errno == EINTR) {
/* restarting a connect() changes its errno semantics */
- INTERRUPTIBLE(::connect(fd, him, len), _result,\
- os::Solaris::clear_interrupted);
+ RESTARTABLE(::connect(fd, him, len), _result);
/* undo these changes */
if (_result == OS_ERR) {
if (errno == EALREADY) {
@@ -6335,20 +6308,23 @@
if (fd < 0) {
return OS_ERR;
}
- INTERRUPTIBLE_RETURN_INT((int)::accept(fd, him, len),\
- os::Solaris::clear_interrupted);
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+ RESTARTABLE_RETURN_INT((int)::accept(fd, him, len));
}
int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags,
sockaddr* from, socklen_t* fromlen) {
- INTERRUPTIBLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen),\
- os::Solaris::clear_interrupted);
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+ RESTARTABLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen));
}
int os::sendto(int fd, char* buf, size_t len, uint flags,
struct sockaddr* to, socklen_t tolen) {
- INTERRUPTIBLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen),\
- os::Solaris::clear_interrupted);
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+ RESTARTABLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen));
}
int os::socket_available(int fd, jint *pbytes) {
@@ -6363,8 +6339,9 @@
}
int os::bind(int fd, struct sockaddr* him, socklen_t len) {
- INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\
- os::Solaris::clear_interrupted);
+ assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_native,
+ "Assumed _thread_in_native");
+ return ::bind(fd, him, len);
}
// Get the default path to the core file
--- a/hotspot/src/os/solaris/vm/os_solaris.hpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/os/solaris/vm/os_solaris.hpp Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -311,24 +311,6 @@
outdata, validity) : -1;
}
- enum {
- clear_interrupted = true
- };
- static void setup_interruptible(JavaThread* thread);
- static void setup_interruptible_already_blocked(JavaThread* thread);
- static JavaThread* setup_interruptible();
- static void cleanup_interruptible(JavaThread* thread);
-
- // perf counter incrementers used by _INTERRUPTIBLE
-
- static void bump_interrupted_before_count();
- static void bump_interrupted_during_count();
-
-#ifdef ASSERT
- static JavaThread* setup_interruptible_native();
- static void cleanup_interruptible_native(JavaThread* thread);
-#endif
-
static sigset_t* unblocked_signals();
static sigset_t* vm_signals();
static sigset_t* allowdebug_blocked_signals();
--- a/hotspot/src/os/solaris/vm/os_solaris.inline.hpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/os/solaris/vm/os_solaris.inline.hpp Mon Mar 24 11:25:32 2014 +0100
@@ -111,104 +111,7 @@
//////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
-// macros for interruptible io and system calls and system call restarting
-
-#define _INTERRUPTIBLE(_setup, _cmd, _result, _thread, _clear, _before, _after, _int_enable) \
-do { \
- _setup; \
- _before; \
- OSThread* _osthread = _thread->osthread(); \
- if (_int_enable && _thread->has_last_Java_frame()) { \
- /* this is java interruptible io stuff */ \
- if (os::is_interrupted(_thread, _clear)) { \
- os::Solaris::bump_interrupted_before_count(); \
- _result = OS_INTRPT; \
- } else { \
- /* _cmd always expands to an assignment to _result */ \
- if ((_cmd) < 0 && errno == EINTR \
- && os::is_interrupted(_thread, _clear)) { \
- os::Solaris::bump_interrupted_during_count(); \
- _result = OS_INTRPT; \
- } \
- } \
- } else { \
- /* this is normal blocking io stuff */ \
- _cmd; \
- } \
- _after; \
-} while(false)
-
-// Interruptible io support + restarting of interrupted system calls
-
-#ifndef ASSERT
-
-#define INTERRUPTIBLE(_cmd, _result, _clear) do { \
- _INTERRUPTIBLE( JavaThread* _thread = (JavaThread*)ThreadLocalStorage::thread(),_result = _cmd, _result, _thread, _clear, , , UseVMInterruptibleIO); \
-} while((_result == OS_ERR) && (errno == EINTR))
-
-#else
-
-// This adds an assertion that it is only called from thread_in_native
-// The call overhead is skipped for performance in product mode
-#define INTERRUPTIBLE(_cmd, _result, _clear) do { \
- _INTERRUPTIBLE(JavaThread* _thread = os::Solaris::setup_interruptible_native(), _result = _cmd, _result, _thread, _clear, , os::Solaris::cleanup_interruptible_native(_thread), UseVMInterruptibleIO ); \
-} while((_result == OS_ERR) && (errno == EINTR))
-
-#endif
-
-// Used for calls from _thread_in_vm, not from _thread_in_native
-#define INTERRUPTIBLE_VM(_cmd, _result, _clear) do { \
- _INTERRUPTIBLE(JavaThread* _thread = os::Solaris::setup_interruptible(), _result = _cmd, _result, _thread, _clear, , os::Solaris::cleanup_interruptible(_thread), UseVMInterruptibleIO ); \
-} while((_result == OS_ERR) && (errno == EINTR))
-
-/* Use NORESTART when the system call cannot return EINTR, when something other
- than a system call is being invoked, or when the caller must do EINTR
- handling. */
-
-#ifndef ASSERT
-
-#define INTERRUPTIBLE_NORESTART(_cmd, _result, _clear) \
- _INTERRUPTIBLE( JavaThread* _thread = (JavaThread*)ThreadLocalStorage::thread(),_result = _cmd, _result, _thread, _clear, , , UseVMInterruptibleIO)
-
-#else
-
-// This adds an assertion that it is only called from thread_in_native
-// The call overhead is skipped for performance in product mode
-#define INTERRUPTIBLE_NORESTART(_cmd, _result, _clear) \
- _INTERRUPTIBLE(JavaThread* _thread = os::Solaris::setup_interruptible_native(), _result = _cmd, _result, _thread, _clear, , os::Solaris::cleanup_interruptible_native(_thread), UseVMInterruptibleIO )
-
-#endif
-
-// Don't attend to UseVMInterruptibleIO. Always allow interruption.
-// Also assumes that it is called from the _thread_blocked state.
-// Used by os_sleep().
-
-#define INTERRUPTIBLE_NORESTART_VM_ALWAYS(_cmd, _result, _thread, _clear) \
- _INTERRUPTIBLE(os::Solaris::setup_interruptible_already_blocked(_thread), _result = _cmd, _result, _thread, _clear, , , true )
-
-#define INTERRUPTIBLE_RETURN_INT(_cmd, _clear) do { \
- int _result; \
- do { \
- INTERRUPTIBLE(_cmd, _result, _clear); \
- } while((_result == OS_ERR) && (errno == EINTR)); \
- return _result; \
-} while(false)
-
-#define INTERRUPTIBLE_RETURN_INT_VM(_cmd, _clear) do { \
- int _result; \
- do { \
- INTERRUPTIBLE_VM(_cmd, _result, _clear); \
- } while((_result == OS_ERR) && (errno == EINTR)); \
- return _result; \
-} while(false)
-
-#define INTERRUPTIBLE_RETURN_INT_NORESTART(_cmd, _clear) do { \
- int _result; \
- INTERRUPTIBLE_NORESTART(_cmd, _result, _clear); \
- return _result; \
-} while(false)
-
-/* Use the RESTARTABLE macros when interruptible io is not needed */
+// macros for restartable system calls
#define RESTARTABLE(_cmd, _result) do { \
do { \
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -497,6 +497,7 @@
template(int_StringBuffer_signature, "(I)Ljava/lang/StringBuffer;") \
template(char_StringBuffer_signature, "(C)Ljava/lang/StringBuffer;") \
template(int_String_signature, "(I)Ljava/lang/String;") \
+ template(codesource_permissioncollection_signature, "(Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V") \
/* signature symbols needed by intrinsics */ \
VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, template, VM_ALIAS_IGNORE) \
\
--- a/hotspot/src/share/vm/memory/allocation.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/share/vm/memory/allocation.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -446,6 +446,7 @@
_first = _chunk = new (AllocFailStrategy::EXIT_OOM, init_size) Chunk(init_size);
_hwm = _chunk->bottom(); // Save the cached hwm, max
_max = _chunk->top();
+ _size_in_bytes = 0;
set_size_in_bytes(init_size);
NOT_PRODUCT(Atomic::inc(&_instance_count);)
}
@@ -454,6 +455,7 @@
_first = _chunk = new (AllocFailStrategy::EXIT_OOM, Chunk::init_size) Chunk(Chunk::init_size);
_hwm = _chunk->bottom(); // Save the cached hwm, max
_max = _chunk->top();
+ _size_in_bytes = 0;
set_size_in_bytes(Chunk::init_size);
NOT_PRODUCT(Atomic::inc(&_instance_count);)
}
--- a/hotspot/src/share/vm/prims/jvm.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/share/vm/prims/jvm.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -1160,18 +1160,22 @@
// and null permissions - which gives no permissions.
oop create_dummy_access_control_context(TRAPS) {
InstanceKlass* pd_klass = InstanceKlass::cast(SystemDictionary::ProtectionDomain_klass());
- // new ProtectionDomain(null,null);
- oop null_protection_domain = pd_klass->allocate_instance(CHECK_NULL);
- Handle null_pd(THREAD, null_protection_domain);
+ Handle obj = pd_klass->allocate_instance_handle(CHECK_NULL);
+ // Call constructor ProtectionDomain(null, null);
+ JavaValue result(T_VOID);
+ JavaCalls::call_special(&result, obj, KlassHandle(THREAD, pd_klass),
+ vmSymbols::object_initializer_name(),
+ vmSymbols::codesource_permissioncollection_signature(),
+ Handle(), Handle(), CHECK_NULL);
// new ProtectionDomain[] {pd};
objArrayOop context = oopFactory::new_objArray(pd_klass, 1, CHECK_NULL);
- context->obj_at_put(0, null_pd());
+ context->obj_at_put(0, obj());
// new AccessControlContext(new ProtectionDomain[] {pd})
objArrayHandle h_context(THREAD, context);
- oop result = java_security_AccessControlContext::create(h_context, false, Handle(), CHECK_NULL);
- return result;
+ oop acc = java_security_AccessControlContext::create(h_context, false, Handle(), CHECK_NULL);
+ return acc;
}
JVM_ENTRY(jobject, JVM_DoPrivileged(JNIEnv *env, jclass cls, jobject action, jobject context, jboolean wrapException))
--- a/hotspot/src/share/vm/prims/jvmtiExport.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -993,7 +993,9 @@
// Before we call the JVMTI agent, we have to set the state in the
// thread for which we are proxying.
JavaThreadState prev_state = real_thread->thread_state();
- assert(prev_state == _thread_blocked, "JavaThread should be at safepoint");
+ assert(((Thread *)real_thread)->is_ConcurrentGC_thread() ||
+ (real_thread->is_Java_thread() && prev_state == _thread_blocked),
+ "should be ConcurrentGCThread or JavaThread at safepoint");
real_thread->set_thread_state(_thread_in_native);
jvmtiExtensionEvent callback = env->ext_callbacks()->ClassUnload;
--- a/hotspot/src/share/vm/runtime/arguments.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -305,6 +305,7 @@
{ "DesiredMethodLimit",
JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) },
#endif // PRODUCT
+ { "UseVMInterruptibleIO", JDK_Version::jdk(8), JDK_Version::jdk(9) },
{ NULL, JDK_Version(0), JDK_Version(0) }
};
@@ -3228,11 +3229,6 @@
return JNI_EINVAL;
}
FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size);
- } else if (match_option(option, "-XX:+UseVMInterruptibleIO", &tail)) {
- // NOTE! In JDK 9, the UseVMInterruptibleIO flag will completely go
- // away and will cause VM initialization failures!
- warning("-XX:+UseVMInterruptibleIO is obsolete and will be removed in a future release.");
- FLAG_SET_CMDLINE(bool, UseVMInterruptibleIO, true);
#if !INCLUDE_MANAGEMENT
} else if (match_option(option, "-XX:+ManagementServer", &tail)) {
jio_fprintf(defaultStream::error_stream(),
--- a/hotspot/src/share/vm/runtime/globals.hpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/share/vm/runtime/globals.hpp Mon Mar 24 11:25:32 2014 +0100
@@ -3862,11 +3862,6 @@
develop(bool, VerifyGenericSignatures, false, \
"Abort VM on erroneous or inconsistent generic signatures") \
\
- product(bool, UseVMInterruptibleIO, false, \
- "(Unstable, Solaris-specific) Thread interrupt before or with " \
- "EINTR for I/O operations results in OS_INTRPT. The default " \
- "value of this flag is true for JDK 6 and earlier") \
- \
diagnostic(bool, WhiteBoxAPI, false, \
"Enable internal testing APIs") \
\
--- a/hotspot/src/share/vm/services/runtimeService.cpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/share/vm/services/runtimeService.cpp Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -38,9 +38,6 @@
PerfCounter* RuntimeService::_total_safepoints = NULL;
PerfCounter* RuntimeService::_safepoint_time_ticks = NULL;
PerfCounter* RuntimeService::_application_time_ticks = NULL;
-PerfCounter* RuntimeService::_thread_interrupt_signaled_count = NULL;
-PerfCounter* RuntimeService::_interrupted_before_count = NULL;
-PerfCounter* RuntimeService::_interrupted_during_count = NULL;
void RuntimeService::init() {
// Make sure the VM version is initialized
@@ -70,26 +67,6 @@
PerfDataManager::create_constant(SUN_RT, "jvmVersion", PerfData::U_None,
(jlong) Abstract_VM_Version::jvm_version(), CHECK);
- // I/O interruption related counters
-
- // thread signaling via os::interrupt()
-
- _thread_interrupt_signaled_count =
- PerfDataManager::create_counter(SUN_RT,
- "threadInterruptSignaled", PerfData::U_Events, CHECK);
-
- // OS_INTRPT via "check before" in _INTERRUPTIBLE
-
- _interrupted_before_count =
- PerfDataManager::create_counter(SUN_RT, "interruptedBeforeIO",
- PerfData::U_Events, CHECK);
-
- // OS_INTRPT via "check during" in _INTERRUPTIBLE
-
- _interrupted_during_count =
- PerfDataManager::create_counter(SUN_RT, "interruptedDuringIO",
- PerfData::U_Events, CHECK);
-
// The capabilities counter is a binary representation of the VM capabilities in string.
// This string respresentation simplifies the implementation of the client side
// to parse the value.
@@ -181,22 +158,4 @@
Management::ticks_to_ms(_application_time_ticks->get_value()) : -1;
}
-void RuntimeService::record_interrupted_before_count() {
- if (UsePerfData) {
- _interrupted_before_count->inc();
- }
-}
-
-void RuntimeService::record_interrupted_during_count() {
- if (UsePerfData) {
- _interrupted_during_count->inc();
- }
-}
-
-void RuntimeService::record_thread_interrupt_signaled_count() {
- if (UsePerfData) {
- _thread_interrupt_signaled_count->inc();
- }
-}
-
#endif // INCLUDE_MANAGEMENT
--- a/hotspot/src/share/vm/services/runtimeService.hpp Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/src/share/vm/services/runtimeService.hpp Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -34,9 +34,6 @@
static PerfCounter* _total_safepoints;
static PerfCounter* _safepoint_time_ticks; // Accumulated time at safepoints
static PerfCounter* _application_time_ticks; // Accumulated time not at safepoints
- static PerfCounter* _thread_interrupt_signaled_count;// os:interrupt thr_kill
- static PerfCounter* _interrupted_before_count; // _INTERRUPTIBLE OS_INTRPT
- static PerfCounter* _interrupted_during_count; // _INTERRUPTIBLE OS_INTRPT
static TimeStamp _safepoint_timer;
static TimeStamp _app_timer;
@@ -58,10 +55,6 @@
static void record_safepoint_end() NOT_MANAGEMENT_RETURN;
static void record_application_start() NOT_MANAGEMENT_RETURN;
- // interruption events
- static void record_interrupted_before_count() NOT_MANAGEMENT_RETURN;
- static void record_interrupted_during_count() NOT_MANAGEMENT_RETURN;
- static void record_thread_interrupt_signaled_count() NOT_MANAGEMENT_RETURN;
};
#endif // SHARE_VM_SERVICES_RUNTIMESERVICE_HPP
--- a/hotspot/test/runtime/CDSCompressedKPtrs/XShareAuto.java Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/test/runtime/CDSCompressedKPtrs/XShareAuto.java Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
*/
/*
- * @ignore 8026154
* @test
* @bug 8005933
* @summary Test that -Xshare:auto uses CDS when explicitly specified with -server.
@@ -50,21 +49,15 @@
pb = ProcessTools.createJavaProcessBuilder(
"-server", "-Xshare:auto", "-XX:+UnlockDiagnosticVMOptions",
- "-XX:SharedArchiveFile=./sample.jsa", "-version");
+ "-XX:SharedArchiveFile=./sample.jsa", "-XX:+PrintSharedSpaces", "-version");
output = new OutputAnalyzer(pb.start());
try {
output.shouldContain("sharing");
- output.shouldHaveExitValue(0);
} catch (RuntimeException e) {
- // If this failed then check that it would also be unable
- // to share even if -Xshare:on is specified. If so, then
- // return a success status.
- pb = ProcessTools.createJavaProcessBuilder(
- "-server", "-Xshare:on", "-XX:+UnlockDiagnosticVMOptions",
- "-XX:SharedArchiveFile=./sample.jsa", "-version");
- output = new OutputAnalyzer(pb.start());
- output.shouldContain("Unable to use shared archive");
- output.shouldHaveExitValue(1);
+ // if sharing failed due to ASLR or similar reasons,
+ // check whether sharing was attempted at all (UseSharedSpaces)
+ output.shouldContain("UseSharedSpaces:");
}
+ output.shouldHaveExitValue(0);
}
}
--- a/hotspot/test/runtime/SharedArchiveFile/CdsDifferentObjectAlignment.java Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/test/runtime/SharedArchiveFile/CdsDifferentObjectAlignment.java Mon Mar 24 11:25:32 2014 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
*/
/*
- * @ignore 8025642
* @test CdsDifferentObjectAlignment
* @summary Testing CDS (class data sharing) using varying object alignment.
* Using different object alignment for each dump/load pair.
@@ -84,7 +83,11 @@
createAlignment,
loadAlignment);
- output.shouldContain(expectedErrorMsg);
+ try {
+ output.shouldContain(expectedErrorMsg);
+ } catch (RuntimeException e) {
+ output.shouldContain("Unable to use shared archive");
+ }
output.shouldHaveExitValue(1);
}
}
--- a/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java Thu Mar 20 15:03:18 2014 +0100
+++ b/hotspot/test/runtime/SharedArchiveFile/DefaultUseWithClient.java Mon Mar 24 11:25:32 2014 +0100
@@ -22,7 +22,6 @@
*/
/*
- * @ignore 8032224
* @test DefaultUseWithClient
* @summary Test default behavior of sharing with -client
* @library /testlibrary
@@ -57,10 +56,17 @@
"-XX:+UnlockDiagnosticVMOptions",
"-XX:SharedArchiveFile=./" + fileName,
"-client",
+ "-XX:+PrintSharedSpaces",
"-version");
output = new OutputAnalyzer(pb.start());
- output.shouldContain("sharing");
+ try {
+ output.shouldContain("sharing");
+ } catch (RuntimeException e) {
+ // if sharing failed due to ASLR or similar reasons,
+ // check whether sharing was attempted at all (UseSharedSpaces)
+ output.shouldContain("UseSharedSpaces:");
+ }
output.shouldHaveExitValue(0);
}
}