jdk/test/java/util/logging/DrainFindDeadlockTest.java
author martin
Tue, 15 Sep 2015 21:56:04 -0700
changeset 32649 2ee9017c7597
parent 30046 cf2c86e1819e
child 32841 4ae281bb919c
permissions -rw-r--r--
8136583: Core libraries should use blessed modifier order Summary: Run blessed-modifier-order script (see bug) Reviewed-by: psandoz, chegar, alanb, plevart
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     1
/*
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
     2
 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
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
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    37
 * @build DrainFindDeadlockTest
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    38
 * @run main/othervm/timeout=10 DrainFindDeadlockTest
30046
cf2c86e1819e 8078334: Mark regression tests using randomness
darcy
parents: 17164
diff changeset
    39
 * @key randomness
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    40
 */
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    41
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    42
/**
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    43
 * This test is checking for a deadlock between
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    44
 * LogManager$LoggerContext.findLogger() and
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    45
 * LogManager.drainLoggerRefQueueBounded() (which could happen by calling
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    46
 * Logger.getLogger() and LogManager.readConfiguration() in different threads)
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    47
 */
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    48
public class DrainFindDeadlockTest {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    49
    private LogManager mgr = LogManager.getLogManager();
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 30046
diff changeset
    50
    private static final int MAX_ITERATIONS = 100;
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    51
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    52
    // Get a ThreadMXBean so we can check for deadlock.  N.B. this may
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    53
    // not be supported on all platforms, which means we will have to
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    54
    // resort to the traditional test timeout method. However, if
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    55
    // we have the support we'll get the deadlock details if one
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    56
    // is detected.
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 30046
diff changeset
    57
    private static final ThreadMXBean threadMXBean =
17164
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    58
            ManagementFactory.getThreadMXBean();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    59
    private final boolean threadMXBeanDeadlockSupported =
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    60
            threadMXBean.isSynchronizerUsageSupported();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    61
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    62
    public static void main(String... args) throws IOException, Exception {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    63
        new DrainFindDeadlockTest().testForDeadlock();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    64
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    65
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    66
    public static void randomDelay() {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    67
        int runs = (int) Math.random() * 1000000;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    68
        int c = 0;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    69
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    70
        for (int i=0; i<runs; ++i) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    71
            c=c+i;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    72
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    73
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    74
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    75
    public void testForDeadlock() throws IOException, Exception {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    76
        System.out.println("Deadlock detection "
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    77
                + (threadMXBeanDeadlockSupported ? "is" : "is not") +
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    78
                            " available.");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    79
        Thread setup = new Thread(new SetupLogger(), "SetupLogger");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    80
        Thread readConfig = new Thread(new ReadConfig(), "ReadConfig");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    81
        Thread check = new Thread(new DeadlockChecker(setup, readConfig),
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    82
                                   "DeadlockChecker");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    83
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    84
        // make the threads daemon threads so they will go away when the
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    85
        // test exits
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    86
        setup.setDaemon(true);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    87
        readConfig.setDaemon(true);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    88
        check.setDaemon(true);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    89
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    90
        check.start(); setup.start(); readConfig.start();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    91
        try {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    92
            check.join();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    93
        } catch (InterruptedException ex) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    94
            ex.printStackTrace();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    95
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    96
        try {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    97
            readConfig.join();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    98
            setup.join();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
    99
        } catch (InterruptedException ex) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   100
            ex.printStackTrace();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   101
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   102
        System.out.println("Test passed");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   103
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   104
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   105
    class SetupLogger implements Runnable {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   106
        Logger logger = null;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   107
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   108
        @Override
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   109
        public void run() {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   110
            System.out.println("Running " + Thread.currentThread().getName());
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   111
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   112
            for (int i=0; i < MAX_ITERATIONS; i++) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   113
                logger = Logger.getLogger("DrainFindDeadlockTest"+i);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   114
                DrainFindDeadlockTest.randomDelay();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   115
            }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   116
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   117
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   118
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   119
    class ReadConfig implements Runnable {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   120
        @Override
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   121
        public void run() {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   122
            System.out.println("Running " + Thread.currentThread().getName());
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   123
            for (int i=0; i < MAX_ITERATIONS; i++) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   124
                try {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   125
                    mgr.readConfiguration();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   126
                } catch (IOException | SecurityException ex) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   127
                    throw new RuntimeException("FAILED: test setup problem", ex);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   128
                }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   129
                DrainFindDeadlockTest.randomDelay();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   130
            }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   131
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   132
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   133
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   134
    class DeadlockChecker implements Runnable {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   135
        Thread t1, t2;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   136
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   137
        DeadlockChecker(Thread t1, Thread t2) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   138
            this.t1 = t1;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   139
            this.t2 = t2;
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
        void checkState(Thread x, Thread y) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   143
            //            System.out.println("checkstate");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   144
            boolean isXblocked = x.getState().equals(State.BLOCKED);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   145
            boolean isYblocked = y.getState().equals(State.BLOCKED);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   146
            long[] deadlockedThreads = null;
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   147
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   148
            if (isXblocked && isYblocked) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   149
                System.out.println("threads blocked");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   150
                // they are both blocked, but this doesn't necessarily mean
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   151
                // they are deadlocked
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   152
                if (threadMXBeanDeadlockSupported) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   153
                    System.out.println("checking for deadlock");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   154
                    deadlockedThreads = threadMXBean.findDeadlockedThreads();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   155
                } else {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   156
                    System.out.println("Can't check for deadlock");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   157
                }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   158
                if (deadlockedThreads != null) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   159
                    System.out.println("We detected a deadlock! ");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   160
                    ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   161
                            deadlockedThreads, true, true);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   162
                    for (ThreadInfo threadInfo: threadInfos) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   163
                        System.out.println(threadInfo);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   164
                    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   165
                    throw new RuntimeException("TEST FAILED: Deadlock detected");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   166
                }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   167
                System.out.println("We may have a deadlock");
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   168
                Map<Thread, StackTraceElement[]> threadMap =
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   169
                        Thread.getAllStackTraces();
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   170
                dumpStack(threadMap.get(x), x);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   171
                dumpStack(threadMap.get(y), y);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   172
            }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   173
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   174
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   175
        private void dumpStack(StackTraceElement[] aStackElt, Thread aThread) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   176
            if (aStackElt != null) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   177
                 System.out.println("Thread:" + aThread.getName() + ": " +
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   178
                                    aThread.getState());
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   179
                 for (StackTraceElement element: aStackElt) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   180
                    System.out.println("   " + element);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   181
                 }
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
        @Override
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   186
        public void run() {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   187
            System.out.println("Running " + Thread.currentThread().getName());
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   188
            for (int i=0; i < MAX_ITERATIONS*2; i++) {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   189
                checkState(t1, t2);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   190
                try {
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   191
                    Thread.sleep(10);
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   192
                } catch (InterruptedException ex) {
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
        }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   196
    }
1304199c8641 8010939: Deadlock in LogManager
jgish
parents:
diff changeset
   197
}