You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Gregory Shimansky (JIRA)" <ji...@apache.org> on 2007/01/28 14:53:49 UTC

[jira] Updated: (HARMONY-2092) [drlvm] Harmony works with volatile variables incorrectly

     [ https://issues.apache.org/jira/browse/HARMONY-2092?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gregory Shimansky updated HARMONY-2092:
---------------------------------------

    Assignee:     (was: Gregory Shimansky)

When the patch is available to fully fix this problem I'll return to it.

> [drlvm] Harmony works with volatile variables incorrectly
> ---------------------------------------------------------
>
>                 Key: HARMONY-2092
>                 URL: https://issues.apache.org/jira/browse/HARMONY-2092
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: Windows and Linux
>            Reporter: Vera Petrashkova
>         Attachments: classloader_and_gc_quick_fix.diff, 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.
-
You can reply to this email to add a comment to the issue online.