test/compiler/6863420/Test.java

Sun, 26 Jul 2009 16:40:14 -0700

author
kvn
date
Sun, 26 Jul 2009 16:40:14 -0700
changeset 1329
665be97e8704
child 1907
c18cbe5936b8
permissions
-rw-r--r--

6863420: os::javaTimeNanos() go backward on Solaris x86
Summary: Use new atomic long load method Atomic::load() to load max_hrtime.
Reviewed-by: never, ysr, johnc, phh, dcubed, acorn

kvn@1329 1 /*
kvn@1329 2 * Copyright 2009 D.E. Shaw. All Rights Reserved.
kvn@1329 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
kvn@1329 4 *
kvn@1329 5 * This code is free software; you can redistribute it and/or modify it
kvn@1329 6 * under the terms of the GNU General Public License version 2 only, as
kvn@1329 7 * published by the Free Software Foundation.
kvn@1329 8 *
kvn@1329 9 * This code is distributed in the hope that it will be useful, but WITHOUT
kvn@1329 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
kvn@1329 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
kvn@1329 12 * version 2 for more details (a copy is included in the LICENSE file that
kvn@1329 13 * accompanied this code).
kvn@1329 14 *
kvn@1329 15 * You should have received a copy of the GNU General Public License version
kvn@1329 16 * 2 along with this work; if not, write to the Free Software Foundation,
kvn@1329 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
kvn@1329 18 *
kvn@1329 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
kvn@1329 20 * CA 95054 USA or visit www.sun.com if you need additional information or
kvn@1329 21 * have any questions.
kvn@1329 22 *
kvn@1329 23 */
kvn@1329 24
kvn@1329 25 /**
kvn@1329 26 * @test
kvn@1329 27 * @bug 6863420
kvn@1329 28 * @summary os::javaTimeNanos() go backward on Solaris x86
kvn@1329 29 *
kvn@1329 30 * @run main/othervm Test
kvn@1329 31 */
kvn@1329 32
kvn@1329 33 public class Test {
kvn@1329 34 static long value = 0;
kvn@1329 35 static boolean got_backward_time = false;
kvn@1329 36
kvn@1329 37 public static void main(String args[]) {
kvn@1329 38 final int count = 100000;
kvn@1329 39
kvn@1329 40 for (int numThreads = 1; numThreads <= 32; numThreads++) {
kvn@1329 41 final int numRuns = 1;
kvn@1329 42 for (int t=1; t <= numRuns; t++) {
kvn@1329 43 final int curRun = t;
kvn@1329 44
kvn@1329 45 System.out.println("Spawning " + numThreads + " threads");
kvn@1329 46 final Thread threads[] = new Thread[numThreads];
kvn@1329 47 for (int i = 0; i < threads.length; i++) {
kvn@1329 48 Runnable thread =
kvn@1329 49 new Runnable() {
kvn@1329 50 public void run() {
kvn@1329 51 for (long l = 0; l < 100000; l++) {
kvn@1329 52 final long start = System.nanoTime();
kvn@1329 53 if (value == 12345678) {
kvn@1329 54 System.out.println("Wow!");
kvn@1329 55 }
kvn@1329 56 final long end = System.nanoTime();
kvn@1329 57 final long time = end - start;
kvn@1329 58 value += time;
kvn@1329 59 if (time < 0) {
kvn@1329 60 System.out.println(
kvn@1329 61 "Backwards: " +
kvn@1329 62 "start=" + start + " " +
kvn@1329 63 "end=" + end + " " +
kvn@1329 64 "time= " + time
kvn@1329 65 );
kvn@1329 66 got_backward_time = true;
kvn@1329 67 }
kvn@1329 68 }
kvn@1329 69 }
kvn@1329 70 };
kvn@1329 71 threads[i] = new Thread(thread, "Thread" + i);
kvn@1329 72 }
kvn@1329 73 for (int i = 0; i < threads.length; i++) {
kvn@1329 74 threads[i].start();
kvn@1329 75 }
kvn@1329 76 for (int i = 0; i < threads.length; i++) {
kvn@1329 77 try {
kvn@1329 78 threads[i].join();
kvn@1329 79 }
kvn@1329 80 catch (InterruptedException e) {
kvn@1329 81 continue;
kvn@1329 82 }
kvn@1329 83 }
kvn@1329 84 }
kvn@1329 85 }
kvn@1329 86
kvn@1329 87 if (got_backward_time) {
kvn@1329 88 System.exit(97);
kvn@1329 89 }
kvn@1329 90 }
kvn@1329 91 }

mercurial