mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-17 22:05:31 +00:00
6988618: JCK test setDaemon0101 hangs on specific machine
Reviewed-by: dholmes, alanb
This commit is contained in:
parent
b09bdda512
commit
628e3faeb4
@ -229,7 +229,7 @@ class Thread implements Runnable {
|
||||
* after setting this thread's interrupt status.
|
||||
*/
|
||||
private volatile Interruptible blocker;
|
||||
private Object blockerLock = new Object();
|
||||
private final Object blockerLock = new Object();
|
||||
|
||||
/* Set the blocker field; invoked via sun.misc.SharedSecrets from java.nio code
|
||||
*/
|
||||
@ -688,16 +688,19 @@ class Thread implements Runnable {
|
||||
throw new IllegalThreadStateException();
|
||||
|
||||
/* Notify the group that this thread is about to be started
|
||||
* so that it can be added to the group's list of threads. */
|
||||
* so that it can be added to the group's list of threads
|
||||
* and the group's unstarted count can be decremented. */
|
||||
group.threadStarting(this);
|
||||
|
||||
boolean failed = true;
|
||||
boolean started = false;
|
||||
try {
|
||||
start0();
|
||||
failed = false;
|
||||
started = true;
|
||||
} finally {
|
||||
try {
|
||||
group.threadStarted(this, failed);
|
||||
if (!started) {
|
||||
group.threadStartFailed(this);
|
||||
}
|
||||
} catch (Throwable ignore) {
|
||||
/* do nothing. If start0 threw a Throwable then
|
||||
it will be passed up the call stack */
|
||||
|
||||
@ -870,9 +870,16 @@ class ThreadGroup implements Thread.UncaughtExceptionHandler {
|
||||
/**
|
||||
* Notifies the group that the thread {@code t} is about to be
|
||||
* started and adds the thread to this thread group.
|
||||
*
|
||||
* The thread is now a fully fledged member of the group, even though
|
||||
* it hasn't been started yet. It will prevent the group from being
|
||||
* destroyed so the unstarted Threads count is decremented.
|
||||
*/
|
||||
void threadStarting(Thread t) {
|
||||
add(t);
|
||||
synchronized (this) {
|
||||
add(t);
|
||||
nUnstartedThreads--;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -907,12 +914,10 @@ class ThreadGroup implements Thread.UncaughtExceptionHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies the group that the thread {@code t} has completed
|
||||
* Notifies the group that the thread {@code t} has failed
|
||||
* an attempt to start.
|
||||
*
|
||||
* <p> If the thread has been started successfully
|
||||
* then the group has its unstarted Threads count decremented.
|
||||
* Otherwise the state of this thread group is rolled back as if the
|
||||
* <p> The state of this thread group is rolled back as if the
|
||||
* attempt to start the thread has never occurred. The thread is again
|
||||
* considered an unstarted member of the thread group, and a subsequent
|
||||
* attempt to start the thread is permitted.
|
||||
@ -923,16 +928,10 @@ class ThreadGroup implements Thread.UncaughtExceptionHandler {
|
||||
* @param failed
|
||||
* true if the thread could not be started successfully
|
||||
*/
|
||||
void threadStarted(Thread t, boolean failed) {
|
||||
void threadStartFailed(Thread t) {
|
||||
synchronized(this) {
|
||||
if (failed) {
|
||||
remove(t);
|
||||
} else {
|
||||
if (destroyed) {
|
||||
return;
|
||||
}
|
||||
nUnstartedThreads--;
|
||||
}
|
||||
remove(t);
|
||||
nUnstartedThreads++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user