jdk/test/java/util/logging/DrainFindDeadlockTest.java
author shurailine
Mon, 08 Feb 2016 18:14:48 -0800
changeset 35768 7066da300a08
parent 32841 4ae281bb919c
permissions -rw-r--r--
8149391: Fix module dependences in java/util tests Reviewed-by: mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     1
/*
35768
7066da300a08 8149391: Fix module dependences in java/util tests
shurailine
parents: 32841
diff changeset
     2
 * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     4
 *
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     7
 * published by the Free Software Foundation.
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     8
 *
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    13
 * accompanied this code).
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    14
 *
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    18
 *
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    21
 * questions.
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    22
 */
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    23
import java.lang.management.ThreadInfo;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    24
import java.lang.management.ThreadMXBean;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    25
import java.lang.Thread.State;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    26
import java.io.IOException;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    27
import java.lang.management.ManagementFactory;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    28
import java.util.logging.LogManager;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    29
import java.util.logging.Logger;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    30
import java.util.Map;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    31
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    32
/**
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    33
 * @test
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    34
 * @bug 8010939
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    35
 * @summary check for deadlock between findLogger() and drainLoggerRefQueueBounded()
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    36
 * @author jim.gish@oracle.com
35768
7066da300a08 8149391: Fix module dependences in java/util tests
shurailine
parents: 32841
diff changeset
    37
 * @modules java.logging
7066da300a08 8149391: Fix module dependences in java/util tests
shurailine
parents: 32841
diff changeset
    38
 *          java.management
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    39
 * @build DrainFindDeadlockTest
32841
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
    40
 * @run main/othervm DrainFindDeadlockTest
30046
cf2c86e1819e 8078334: Mark regression tests using randomness
darcy
parents: 17164
diff changeset
    41
 * @key randomness
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    42
 */
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    43
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    44
/**
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    45
 * This test is checking for a deadlock between
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    46
 * LogManager$LoggerContext.findLogger() and
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    47
 * LogManager.drainLoggerRefQueueBounded() (which could happen by calling
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    48
 * Logger.getLogger() and LogManager.readConfiguration() in different threads)
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    49
 */
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    50
public class DrainFindDeadlockTest {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    51
    private LogManager mgr = LogManager.getLogManager();
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 30046
diff changeset
    52
    private static final int MAX_ITERATIONS = 100;
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    53
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    54
    // Get a ThreadMXBean so we can check for deadlock.  N.B. this may
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    55
    // not be supported on all platforms, which means we will have to
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    56
    // resort to the traditional test timeout method. However, if
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    57
    // we have the support we'll get the deadlock details if one
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    58
    // is detected.
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 30046
diff changeset
    59
    private static final ThreadMXBean threadMXBean =
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    60
            ManagementFactory.getThreadMXBean();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    61
    private final boolean threadMXBeanDeadlockSupported =
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    62
            threadMXBean.isSynchronizerUsageSupported();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    63
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    64
    public static void main(String... args) throws IOException, Exception {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    65
        new DrainFindDeadlockTest().testForDeadlock();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    66
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    67
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    68
    public static void randomDelay() {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    69
        int runs = (int) Math.random() * 1000000;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    70
        int c = 0;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    71
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    72
        for (int i=0; i<runs; ++i) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    73
            c=c+i;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    74
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    75
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    76
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    77
    public void testForDeadlock() throws IOException, Exception {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    78
        System.out.println("Deadlock detection "
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    79
                + (threadMXBeanDeadlockSupported ? "is" : "is not") +
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    80
                            " available.");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    81
        Thread setup = new Thread(new SetupLogger(), "SetupLogger");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    82
        Thread readConfig = new Thread(new ReadConfig(), "ReadConfig");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    83
        Thread check = new Thread(new DeadlockChecker(setup, readConfig),
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    84
                                   "DeadlockChecker");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    85
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    86
        // make the threads daemon threads so they will go away when the
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    87
        // test exits
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    88
        setup.setDaemon(true);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    89
        readConfig.setDaemon(true);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    90
        check.setDaemon(true);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    91
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    92
        check.start(); setup.start(); readConfig.start();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    93
        try {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    94
            check.join();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    95
        } catch (InterruptedException ex) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    96
            ex.printStackTrace();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    97
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    98
        try {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    99
            readConfig.join();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   100
            setup.join();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   101
        } catch (InterruptedException ex) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   102
            ex.printStackTrace();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   103
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   104
        System.out.println("Test passed");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   105
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   106
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   107
    class SetupLogger implements Runnable {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   108
        Logger logger = null;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   109
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   110
        @Override
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   111
        public void run() {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   112
            System.out.println("Running " + Thread.currentThread().getName());
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   113
32841
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   114
            try {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   115
                for (int i=0; i < MAX_ITERATIONS; i++) {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   116
                    logger = Logger.getLogger("DrainFindDeadlockTest"+i);
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   117
                    DrainFindDeadlockTest.randomDelay();
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   118
                }
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   119
            } finally {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   120
                System.out.println("Completed " + Thread.currentThread().getName());
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   121
            }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   122
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   123
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   124
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   125
    class ReadConfig implements Runnable {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   126
        @Override
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   127
        public void run() {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   128
            System.out.println("Running " + Thread.currentThread().getName());
32841
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   129
            try {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   130
                for (int i=0; i < MAX_ITERATIONS; i++) {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   131
                    try {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   132
                        mgr.readConfiguration();
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   133
                    } catch (IOException | SecurityException ex) {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   134
                        throw new RuntimeException("FAILED: test setup problem", ex);
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   135
                    }
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   136
                    DrainFindDeadlockTest.randomDelay();
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   137
                }
32841
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   138
            } finally {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   139
                System.out.println("Completed " + Thread.currentThread().getName());
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   140
            }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   141
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   142
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   143
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   144
    class DeadlockChecker implements Runnable {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   145
        Thread t1, t2;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   146
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   147
        DeadlockChecker(Thread t1, Thread t2) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   148
            this.t1 = t1;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   149
            this.t2 = t2;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   150
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   151
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   152
        void checkState(Thread x, Thread y) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   153
            //            System.out.println("checkstate");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   154
            boolean isXblocked = x.getState().equals(State.BLOCKED);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   155
            boolean isYblocked = y.getState().equals(State.BLOCKED);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   156
            long[] deadlockedThreads = null;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   157
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   158
            if (isXblocked && isYblocked) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   159
                System.out.println("threads blocked");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   160
                // they are both blocked, but this doesn't necessarily mean
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   161
                // they are deadlocked
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   162
                if (threadMXBeanDeadlockSupported) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   163
                    System.out.println("checking for deadlock");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   164
                    deadlockedThreads = threadMXBean.findDeadlockedThreads();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   165
                } else {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   166
                    System.out.println("Can't check for deadlock");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   167
                }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   168
                if (deadlockedThreads != null) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   169
                    System.out.println("We detected a deadlock! ");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   170
                    ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   171
                            deadlockedThreads, true, true);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   172
                    for (ThreadInfo threadInfo: threadInfos) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   173
                        System.out.println(threadInfo);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   174
                    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   175
                    throw new RuntimeException("TEST FAILED: Deadlock detected");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   176
                }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   177
                System.out.println("We may have a deadlock");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   178
                Map<Thread, StackTraceElement[]> threadMap =
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   179
                        Thread.getAllStackTraces();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   180
                dumpStack(threadMap.get(x), x);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   181
                dumpStack(threadMap.get(y), y);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   182
            }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   183
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   184
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   185
        private void dumpStack(StackTraceElement[] aStackElt, Thread aThread) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   186
            if (aStackElt != null) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   187
                 System.out.println("Thread:" + aThread.getName() + ": " +
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   188
                                    aThread.getState());
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   189
                 for (StackTraceElement element: aStackElt) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   190
                    System.out.println("   " + element);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   191
                 }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   192
            }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   193
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   194
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   195
        @Override
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   196
        public void run() {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   197
            System.out.println("Running " + Thread.currentThread().getName());
32841
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   198
            try {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   199
                for (int i=0; i < MAX_ITERATIONS*2; i++) {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   200
                    checkState(t1, t2);
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   201
                    try {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   202
                        Thread.sleep(10);
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   203
                    } catch (InterruptedException ex) {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   204
                    }
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   205
                }
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   206
            } finally {
4ae281bb919c 8137289: java/util/logging/DrainFindDeadlockTest.java hangs
dfuchs
parents: 32649
diff changeset
   207
                System.out.println("Completed " + Thread.currentThread().getName());
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   208
            }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   209
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   210
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   211
}