Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 35348 invoked from network); 18 Jun 2007 11:35:49 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 Jun 2007 11:35:49 -0000 Received: (qmail 23208 invoked by uid 500); 18 Jun 2007 11:35:53 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 23186 invoked by uid 500); 18 Jun 2007 11:35:53 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 23177 invoked by uid 99); 18 Jun 2007 11:35:52 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Jun 2007 04:35:52 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Jun 2007 04:35:48 -0700 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 9CEB77141E8 for ; Mon, 18 Jun 2007 04:35:28 -0700 (PDT) Message-ID: <21078079.1182166528638.JavaMail.jira@brutus> Date: Mon, 18 Jun 2007 04:35:28 -0700 (PDT) From: "Mikhail Fursov (JIRA)" To: commits@harmony.apache.org Subject: [jira] Resolved: (HARMONY-2092) [drlvm][jit] Harmony works with volatile variables incorrectly MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/HARMONY-2092?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mikhail Fursov resolved HARMONY-2092. ------------------------------------- Resolution: Fixed committed as 548326 > [drlvm][jit] 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 > Assignee: Mikhail Fursov > Attachments: classloader_and_gc_quick_fix.diff, HARMONY-2092-JET-part-cmpxchg8b.patch, HARMONY-2092-JET-part-v2.patch, HARMONY-2092-OPT-part-cmpxchg8b.patch, HARMONY-2092-OPT-part-cmpxchg8b.patch, HARMONY-2092-regression_test.patch, HARMONY-2092.patch, volatile-cmpxchg8b.diff, volatile-cmpxchg8b.version2.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.