mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
4926961
: 4/4 TransformerManagementThreadRemoveTests hangs
Changes motivated by Effective Java - Item 48 & Item 51. Reviewed-by: sspitsyn
This commit is contained in:
parent
41dd8d9f6f
commit
bab69115c7
2 changed files with 40 additions and 9 deletions
|
@ -137,9 +137,16 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
|
||||||
threads[i].start();
|
threads[i].start();
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!exec.fDone)
|
// Effective Java - Item 48: Synchronize access to shared mutable data
|
||||||
|
// Don't use a direct field getter.
|
||||||
|
while (!exec.isDone())
|
||||||
{
|
{
|
||||||
Thread.currentThread().yield();
|
// Effective Java - Item 51: Don't depend on the thread scheduler
|
||||||
|
// Use sleep() instead of yield().
|
||||||
|
try {
|
||||||
|
Thread.sleep(500);
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
assertTrue(finalCheck());
|
assertTrue(finalCheck());
|
||||||
|
|
||||||
|
@ -175,13 +182,17 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
|
||||||
this.fExec = exec;
|
this.fExec = exec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Effective Java - Item 48: Synchronize access to shared mutable data
|
||||||
|
// Document a synchronized setter.
|
||||||
protected synchronized void
|
protected synchronized void
|
||||||
threadFinished(Thread t)
|
threadFinished(Thread t)
|
||||||
{
|
{
|
||||||
fFinished++;
|
fFinished++;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean
|
// Effective Java - Item 48: Synchronize access to shared mutable data
|
||||||
|
// Provide synchronized getter.
|
||||||
|
protected synchronized boolean
|
||||||
threadsDone()
|
threadsDone()
|
||||||
{
|
{
|
||||||
return fFinished == TOTAL_THREADS;
|
return fFinished == TOTAL_THREADS;
|
||||||
|
@ -194,7 +205,9 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
|
||||||
protected boolean
|
protected boolean
|
||||||
testCompleted()
|
testCompleted()
|
||||||
{
|
{
|
||||||
return getExecThread().fDone;
|
// Effective Java - Item 48: Synchronize access to shared mutable data
|
||||||
|
// Don't use direct field getter.
|
||||||
|
return getExecThread().isDone();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -339,6 +352,18 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
|
||||||
{
|
{
|
||||||
private boolean fDone = false;
|
private boolean fDone = false;
|
||||||
|
|
||||||
|
// Effective Java - Item 48: Synchronize access to shared mutable data
|
||||||
|
// Provide a synchronized getter.
|
||||||
|
private synchronized boolean isDone() {
|
||||||
|
return fDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Effective Java - Item 48: Synchronize access to shared mutable data
|
||||||
|
// Provide a synchronized setter.
|
||||||
|
private synchronized void setIsDone() {
|
||||||
|
fDone = true;
|
||||||
|
}
|
||||||
|
|
||||||
public void
|
public void
|
||||||
run()
|
run()
|
||||||
{
|
{
|
||||||
|
@ -349,7 +374,9 @@ public class TransformerManagementThreadAddTests extends ATestCaseScaffold
|
||||||
|
|
||||||
// Do a final check for good measure
|
// Do a final check for good measure
|
||||||
executeTransform();
|
executeTransform();
|
||||||
fDone = true;
|
// Effective Java - Item 48: Synchronize access to shared mutable data
|
||||||
|
// Don't use direct field setter.
|
||||||
|
setIsDone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,9 @@
|
||||||
* @summary multi-thread test to exercise sync and contention for removes to transformer registry
|
* @summary multi-thread test to exercise sync and contention for removes to transformer registry
|
||||||
* @author Gabriel Adauto, Wily Technology
|
* @author Gabriel Adauto, Wily Technology
|
||||||
*
|
*
|
||||||
* @ignore Disabled until race condition which hangs test can be fixed.
|
|
||||||
* @run build TransformerManagementThreadRemoveTests
|
* @run build TransformerManagementThreadRemoveTests
|
||||||
* @run shell MakeJAR.sh basicAgent
|
* @run shell MakeJAR.sh redefineAgent
|
||||||
* @run main/othervm -javaagent:basicAgent.jar TransformerManagementThreadRemoveTests TransformerManagementThreadRemoveTests
|
* @run main/othervm -javaagent:redefineAgent.jar TransformerManagementThreadRemoveTests TransformerManagementThreadRemoveTests
|
||||||
*/
|
*/
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
@ -87,7 +86,12 @@ public class TransformerManagementThreadRemoveTests
|
||||||
|
|
||||||
while (!testCompleted())
|
while (!testCompleted())
|
||||||
{
|
{
|
||||||
Thread.currentThread().yield();
|
// Effective Java - Item 51: Don't depend on the thread scheduler
|
||||||
|
// Use sleep() instead of yield().
|
||||||
|
try {
|
||||||
|
Thread.sleep(500);
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
assertTrue(finalCheck());
|
assertTrue(finalCheck());
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue