-
Bug
-
Resolution: Duplicate
-
P3
-
7
-
generic
-
generic
SYNOPSIS
--------
Phaser.arrive() throws IllegalStateException
OPERATING SYSTEM
----------------
Tested on Windows and Linux
FULL JDK VERSION
----------------
JDK 7 (b128 onwards)
PROBLEM DESCRIPTION from LICENSEE
---------------------------------
The attached testcase throws an IllegalStateException when run against JDK 7 b128 or later. This appears to be caused by a timing issue.
There were two changes in the concurrency code in b128:
7011857: java/util/concurrent/Phaser/FickleRegister.java fails on solaris-sparc
7005424: Resync java.util.concurrent classes with Dougs CVS - Jan 2011
REPRODUCTION INSTRUCTIONS
-------------------------
Compile and run the attached testcase.
Expected behaviour
Should run forever without throwing an Exception
Observed behaviour
An Exception is thrown shortly after the testcase starts, for example:
java.lang.IllegalStateException: Attempted arrival of unregistered party for java.util.concurrent.Phaser@471e30[phase =
197942 parties = 2 arrived = 2]
at java.util.concurrent.Phaser.doArrive(Phaser.java:389)
at java.util.concurrent.Phaser.arrive(Phaser.java:622)
at PhaserTest$PhaserTestHelper.run(PhaserTest.java:38)
at java.lang.Thread.run(Thread.java:732)
TESTCASE
--------
import java.util.concurrent.Phaser;
public class PhaserTest {
private Phaser testPhaser = new Phaser();
public void doTest() {
Thread[] helpers = new Thread[2];
for (int i = 0; i < helpers.length; i++) {
Thread phaserHelper = new Thread(new PhaserTestHelper(testPhaser));
phaserHelper.setName("Thread" + i);
helpers[i] = phaserHelper;
}
for (int i = 0; i < helpers.length; i++) {
helpers[i].start();
}
while (true) {
if (testPhaser.isTerminated())
break;
}
}
public class PhaserTestHelper implements Runnable {
private Phaser myPhaser;
public PhaserTestHelper(Phaser phaser) {
myPhaser = phaser;
myPhaser.register();
}
public void run() {
while (true) {
try {
if (myPhaser.isTerminated())
break;
myPhaser.arrive();
} catch (IllegalStateException ise) {
ise.printStackTrace();
myPhaser.forceTermination();
break;
}
}
}
}
public static void main(String[] args){
PhaserTest problem = new PhaserTest();
problem.doTest();
}
}
--------
Phaser.arrive() throws IllegalStateException
OPERATING SYSTEM
----------------
Tested on Windows and Linux
FULL JDK VERSION
----------------
JDK 7 (b128 onwards)
PROBLEM DESCRIPTION from LICENSEE
---------------------------------
The attached testcase throws an IllegalStateException when run against JDK 7 b128 or later. This appears to be caused by a timing issue.
There were two changes in the concurrency code in b128:
7011857: java/util/concurrent/Phaser/FickleRegister.java fails on solaris-sparc
7005424: Resync java.util.concurrent classes with Dougs CVS - Jan 2011
REPRODUCTION INSTRUCTIONS
-------------------------
Compile and run the attached testcase.
Expected behaviour
Should run forever without throwing an Exception
Observed behaviour
An Exception is thrown shortly after the testcase starts, for example:
java.lang.IllegalStateException: Attempted arrival of unregistered party for java.util.concurrent.Phaser@471e30[phase =
197942 parties = 2 arrived = 2]
at java.util.concurrent.Phaser.doArrive(Phaser.java:389)
at java.util.concurrent.Phaser.arrive(Phaser.java:622)
at PhaserTest$PhaserTestHelper.run(PhaserTest.java:38)
at java.lang.Thread.run(Thread.java:732)
TESTCASE
--------
import java.util.concurrent.Phaser;
public class PhaserTest {
private Phaser testPhaser = new Phaser();
public void doTest() {
Thread[] helpers = new Thread[2];
for (int i = 0; i < helpers.length; i++) {
Thread phaserHelper = new Thread(new PhaserTestHelper(testPhaser));
phaserHelper.setName("Thread" + i);
helpers[i] = phaserHelper;
}
for (int i = 0; i < helpers.length; i++) {
helpers[i].start();
}
while (true) {
if (testPhaser.isTerminated())
break;
}
}
public class PhaserTestHelper implements Runnable {
private Phaser myPhaser;
public PhaserTestHelper(Phaser phaser) {
myPhaser = phaser;
myPhaser.register();
}
public void run() {
while (true) {
try {
if (myPhaser.isTerminated())
break;
myPhaser.arrive();
} catch (IllegalStateException ise) {
ise.printStackTrace();
myPhaser.forceTermination();
break;
}
}
}
}
public static void main(String[] args){
PhaserTest problem = new PhaserTest();
problem.doTest();
}
}
- duplicates
-
JDK-7058828 test/java/util/concurrent/Phaser/Arrive.java fails intermittently
- Closed
- relates to
-
JDK-7011857 java/util/concurrent/Phaser/FickleRegister.java fails on solaris-sparc
- Closed
-
JDK-7005424 Resync java.util.concurrent classes with Dougs CVS - Jan 2011
- Closed