You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Vera Petrashkova (JIRA)" <ji...@apache.org> on 2006/11/08 05:42:52 UTC
[jira] Updated: (HARMONY-2092) [drlvm] Harmony works with volatile
variables incorrectly
[ http://issues.apache.org/jira/browse/HARMONY-2092?page=all ]
Vera Petrashkova updated HARMONY-2092:
--------------------------------------
Attachment: volatileTest.zip
volatileTest.zip contains test source code and class files
> [drlvm] Harmony works with volatile variables incorrectly
> ---------------------------------------------------------
>
> Key: HARMONY-2092
> URL: http://issues.apache.org/jira/browse/HARMONY-2092
> Project: Harmony
> Issue Type: Bug
> Components: DRLVM
> Environment: Windows and Linux
> Reporter: Vera Petrashkova
> Attachments: volatileTest.zip
>
>
> When Long_MAX_VALUE or Long.MIN_VALUE should be assigned to volatile variable then
> VM works incorrectly.
> Code for reproducing:
> ------------------volatileTest.java-----------------
> public class volatileTest {
> public static int delay = 5000;
> private boolean interruptFlag = false;
> long hi;
> long lo;
> volatile long v;
> public static void main(String [] args ) {
> int maxI = 20;
> for (int i = 0; i < maxI; i++) {
> int t = new volatileTest().test(delay);
> System.out.println((t == 104 ? "Test passed: ": "Test failed: ")
> + t + " (step: " + i + ")");
> }
> }
> public synchronized void interrupt() {
> interruptFlag = true;
> }
> public synchronized boolean interrupted() {
> return interruptFlag;
> }
> public volatileTest() {
> super();
> hi = Long.MAX_VALUE;
> lo = Long.MIN_VALUE;
> v = hi;
> }
> public int test(int delay) {
> boolean passed = true;
> Thread_1_class t1 = new Thread_1_class(this);
> Thread_2_class t2 = new Thread_2_class(this);
> Interruptor killer = new Interruptor(this, delay);
> try {
> t1.start();
> t2.start();
> killer.start();
>
> while (!interrupted()) {
> Thread.yield();
> long v3 = v;
> if (v3 != hi && v3 != lo) {
> System.out.println(v3+" "+hi +" "+lo);
> passed = false;
> break;
> }
> }
> t1.interrupt();
> t2.interrupt();
> return passed ? 104 : 105;
> } catch (Throwable e) {
> e.printStackTrace();
> return 106;
> }
> }
> }
> class Thread_1_class extends Thread {
> volatileTest thh;
> public Thread_1_class (volatileTest t) {
> super();
> thh = t;
> }
> public void run() {
> while (!isInterrupted()) {
> thh.v = thh.lo;
> thh.v = thh.hi;
> }
> }
> }
> class Thread_2_class extends Thread {
> volatileTest thh;
> public Thread_2_class (volatileTest t) {
> super();
> thh = t;
> }
> public void run() {
> while (!isInterrupted()) {
> thh.v = thh.hi;
> thh.v = thh.lo;
> }
> }
> }
> class Interruptor extends Thread {
> volatileTest t;
> int delay;
> public Interruptor(volatileTest t, int delay) {
> this.t = t;
> this.delay = delay;
> }
> public void run() {
> try {
> Thread.sleep(delay);
> } catch (InterruptedException e) {
> }
> t.interrupt();
> }
> }
> ----------------------------
> Output on RI:
> ================
> java version "1.5.0_06"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
> Test passed: 104 (step: 0)
> Test passed: 104 (step: 1)
> Test passed: 104 (step: 2)
> Test passed: 104 (step: 3)
> Test passed: 104 (step: 4)
> Test passed: 104 (step: 5)
> Test passed: 104 (step: 6)
> Test passed: 104 (step: 7)
> Test passed: 104 (step: 8)
> Test passed: 104 (step: 9)
> Test passed: 104 (step: 10)
> Test passed: 104 (step: 11)
> Test passed: 104 (step: 12)
> Test passed: 104 (step: 13)
> Test passed: 104 (step: 14)
> Test passed: 104 (step: 15)
> Test passed: 104 (step: 16)
> Test passed: 104 (step: 17)
> Test passed: 104 (step: 18)
> Test passed: 104 (step: 19)
> Output on Harmony:
> ====================
> Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
> java version "1.5.0"
> pre-alpha : not complete or compatible
> svn = r471468, (Nov 7 2006), Windows/ia32/msvc 1310, release build
> http://incubator.apache.org/harmony
> Test passed: 104 (step: 0)
> Test passed: 104 (step: 1)
> Test passed: 104 (step: 2)
> Test passed: 104 (step: 3)
> Test passed: 104 (step: 4)
> Test passed: 104 (step: 5)
> Test passed: 104 (step: 6)
> Test passed: 104 (step: 7)
> Test passed: 104 (step: 8)
> Test passed: 104 (step: 9)
> Test passed: 104 (step: 10)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 11)
> Test passed: 104 (step: 12)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 13)
> Test passed: 104 (step: 14)
> Test passed: 104 (step: 15)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 16)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 17)
> Test passed: 104 (step: 18)
> Test passed: 104 (step: 19)
> Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
> java version "1.5.0"
> pre-alpha : not complete or compatible
> svn = r471468, (Nov 7 2006), Linux/ia32/gcc 3.3.3, release build
> http://incubator.apache.org/harmony
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 0)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 1)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 2)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 3)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 4)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 5)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 6)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 7)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 8)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 9)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 10)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 11)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 12)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 13)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 14)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 15)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 16)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 17)
> -9223372032559808513 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 18)
> 9223372032559808512 9223372036854775807 -9223372036854775808
> Test failed: 105 (step: 19)
> This bug is reproducible on Jitrino (JET/OPT) and on interpreter:
> java -cp . volatileTest
> java -cp . -Xint volatileTest
> java -cp . -Xem:opt volatileTest
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira