jdk/test/java/util/logging/LoggingDeadlock2.java
author katleman
Thu, 20 Dec 2012 16:24:50 -0800
changeset 14856 92a1bcf46888
parent 14683 38921a46c62d
child 25399 a8ec88e2d76f
permissions -rw-r--r--
8004982: JDK8 source with GPL header errors Reviewed-by: ohair
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
14856
92a1bcf46888 8004982: JDK8 source with GPL header errors
katleman
parents: 14683
diff changeset
     2
 * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
90ce3da70b43 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2930
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2930
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2930
diff changeset
    21
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    22
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
/*
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
 * @test
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    26
 * @bug     6467152 6716076 6829503
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
 * @summary deadlock occurs in LogManager initialization and JVM termination
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    28
 * @author  Serguei Spitsyn / Hitachi / Martin Buchholz
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
 * @build    LoggingDeadlock2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
 * @run  main/timeout=15 LoggingDeadlock2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    32
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
 * There is a clear deadlock between LogManager.<clinit> and
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
 * Cleaner.run() methods.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
 * T1 thread:
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
 *   The LogManager.<clinit> creates LogManager.manager object,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
 *   sets shutdown hook with the Cleaner class and then waits
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
 *   to lock the LogManager.manager monitor.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
 * T2 thread:
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
 *   It is started by the System.exit() as shutdown hook thread.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
 *   It locks the LogManager.manager monitor and then calls the
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
 *   static methods of the LogManager class (in this particular
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
 *   case it is a trick of the inner classes implementation).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
 *   It is waits when the LogManager.<clinit> is completed.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
 * This is a regression test for this bug.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    49
import java.util.Arrays;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    50
import java.util.List;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    51
import java.util.Random;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    52
import java.util.concurrent.CyclicBarrier;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    53
import java.util.concurrent.atomic.AtomicInteger;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
import java.util.logging.LogManager;
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    55
import java.io.File;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    56
import java.io.InputStream;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    57
import java.io.InputStreamReader;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    58
import java.io.Reader;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    60
public class LoggingDeadlock2 {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    61
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    62
    public static void realMain(String arg[]) throws Throwable {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
        try {
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    64
            System.out.println(javaChildArgs);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    65
            ProcessBuilder pb = new ProcessBuilder(javaChildArgs);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    66
            ProcessResults r = run(pb.start());
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    67
            equal(r.exitValue(), 99);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    68
            equal(r.out(), "");
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    69
            equal(r.err(), "");
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    70
        } catch (Throwable t) { unexpected(t); }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    71
    }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    72
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    73
    public static class JavaChild {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    74
        public static void main(String args[]) throws Throwable {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    75
            final CyclicBarrier startingGate = new CyclicBarrier(2);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    76
            final Throwable[] thrown = new Throwable[1];
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    77
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    78
            // Some random variation, to help tickle races.
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    79
            final Random rnd = new Random();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    80
            final boolean dojoin = rnd.nextBoolean();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    81
            final int JITTER = 1024;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    82
            final int iters1 = rnd.nextInt(JITTER);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    83
            final int iters2 = JITTER - iters1;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    84
            final AtomicInteger counter = new AtomicInteger(0);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    85
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    86
            Thread exiter = new Thread() {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    87
                public void run() {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    88
                    try {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    89
                        startingGate.await();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    90
                        for (int i = 0; i < iters1; i++)
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    91
                            counter.getAndIncrement();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    92
                        System.exit(99);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    93
                    } catch (Throwable t) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    94
                        t.printStackTrace();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    95
                        System.exit(86);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    96
                    }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    97
                }};
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    98
            exiter.start();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
    99
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   100
            startingGate.await();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   101
            for (int i = 0; i < iters2; i++)
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   102
                counter.getAndIncrement();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   103
            // This may or may not result in a first call to
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   104
            // Runtime.addShutdownHook after shutdown has already
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   105
            // commenced.
14683
38921a46c62d 8003380: Compiler warnings in logging test code
jgish
parents: 5506
diff changeset
   106
            LogManager.getLogManager();
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   107
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   108
            if (dojoin) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   109
                exiter.join();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   110
                if (thrown[0] != null)
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   111
                    throw new Error(thrown[0]);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   112
                check(counter.get() == JITTER);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   114
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   117
    //----------------------------------------------------------------
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   118
    // The rest of this test is copied from ProcessBuilder/Basic.java
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   119
    //----------------------------------------------------------------
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   120
    private static final String javaExe =
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   121
        System.getProperty("java.home") +
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   122
        File.separator + "bin" + File.separator + "java";
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   123
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   124
    private static final String classpath =
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   125
        System.getProperty("java.class.path");
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   126
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   127
    private static final List<String> javaChildArgs =
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   128
        Arrays.asList(new String[]
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   129
            { javaExe, "-classpath", classpath,
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   130
              "LoggingDeadlock2$JavaChild"});
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   131
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   132
    private static class ProcessResults {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   133
        private final String out;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   134
        private final String err;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   135
        private final int exitValue;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   136
        private final Throwable throwable;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   137
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   138
        public ProcessResults(String out,
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   139
                              String err,
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   140
                              int exitValue,
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   141
                              Throwable throwable) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   142
            this.out = out;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   143
            this.err = err;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   144
            this.exitValue = exitValue;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   145
            this.throwable = throwable;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   146
        }
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   147
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   148
        public String out()          { return out; }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   149
        public String err()          { return err; }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   150
        public int exitValue()       { return exitValue; }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   151
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   152
        public String toString() {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   153
            StringBuilder sb = new StringBuilder();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   154
            sb.append("<STDOUT>\n" + out() + "</STDOUT>\n")
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   155
                .append("<STDERR>\n" + err() + "</STDERR>\n")
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   156
                .append("exitValue = " + exitValue + "\n");
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   157
            if (throwable != null)
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   158
                sb.append(throwable.getStackTrace());
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   159
            return sb.toString();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   160
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
    }
2631
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   162
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   163
    private static class StreamAccumulator extends Thread {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   164
        private final InputStream is;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   165
        private final StringBuilder sb = new StringBuilder();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   166
        private Throwable throwable = null;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   167
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   168
        public String result () throws Throwable {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   169
            if (throwable != null)
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   170
                throw throwable;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   171
            return sb.toString();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   172
        }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   173
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   174
        StreamAccumulator (InputStream is) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   175
            this.is = is;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   176
        }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   177
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   178
        public void run() {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   179
            try {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   180
                Reader r = new InputStreamReader(is);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   181
                char[] buf = new char[4096];
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   182
                int n;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   183
                while ((n = r.read(buf)) > 0) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   184
                    sb.append(buf,0,n);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   185
                }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   186
            } catch (Throwable t) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   187
                throwable = t;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   188
            } finally {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   189
                try { is.close(); }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   190
                catch (Throwable t) { throwable = t; }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   191
            }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   192
        }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   193
    }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   194
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   195
    private static ProcessResults run(Process p) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   196
        Throwable throwable = null;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   197
        int exitValue = -1;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   198
        String out = "";
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   199
        String err = "";
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   200
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   201
        StreamAccumulator outAccumulator =
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   202
            new StreamAccumulator(p.getInputStream());
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   203
        StreamAccumulator errAccumulator =
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   204
            new StreamAccumulator(p.getErrorStream());
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   205
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   206
        try {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   207
            outAccumulator.start();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   208
            errAccumulator.start();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   209
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   210
            exitValue = p.waitFor();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   211
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   212
            outAccumulator.join();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   213
            errAccumulator.join();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   214
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   215
            out = outAccumulator.result();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   216
            err = errAccumulator.result();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   217
        } catch (Throwable t) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   218
            throwable = t;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   219
        }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   220
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   221
        return new ProcessResults(out, err, exitValue, throwable);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   222
    }
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   223
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   224
    //--------------------- Infrastructure ---------------------------
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   225
    static volatile int passed = 0, failed = 0;
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   226
    static void pass() {passed++;}
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   227
    static void fail() {failed++; Thread.dumpStack();}
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   228
    static void fail(String msg) {System.out.println(msg); fail();}
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   229
    static void unexpected(Throwable t) {failed++; t.printStackTrace();}
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   230
    static void check(boolean cond) {if (cond) pass(); else fail();}
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   231
    static void check(boolean cond, String m) {if (cond) pass(); else fail(m);}
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   232
    static void equal(Object x, Object y) {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   233
        if (x == null ? y == null : x.equals(y)) pass();
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   234
        else fail(x + " not equal to " + y);}
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   235
    public static void main(String[] args) throws Throwable {
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   236
        try {realMain(args);} catch (Throwable t) {unexpected(t);}
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   237
        System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
29398881792c 6716076: test UTIL_REGRESSION/test/java/util/logging/LoggingDeadlock2.java failed with exit code 1
martin
parents: 2401
diff changeset
   238
        if (failed > 0) throw new AssertionError("Some tests failed");}
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   239
}