Package org.h2.util

Class AbbaLockingDetector

java.lang.Object
org.h2.util.AbbaLockingDetector
All Implemented Interfaces:
Runnable

public class AbbaLockingDetector extends Object implements Runnable
Utility to detect AB-BA deadlocks.
  • Field Details

    • tickIntervalMs

      private final int tickIntervalMs
      See Also:
    • stop

      private volatile boolean stop
    • threadMXBean

      private final ThreadMXBean threadMXBean
    • thread

      private Thread thread
    • lockOrdering

      private final Map<String,Map<String,String>> lockOrdering
      Map of (object A) -> ( map of (object locked before object A) -> (stack trace where locked) )
    • knownDeadlocks

      private final Set<String> knownDeadlocks
  • Constructor Details

    • AbbaLockingDetector

      public AbbaLockingDetector()
  • Method Details

    • startCollecting

      public AbbaLockingDetector startCollecting()
      Start collecting locking data.
      Returns:
      this
    • reset

      public void reset()
      Reset the state.
    • stopCollecting

      public AbbaLockingDetector stopCollecting()
      Stop collecting.
      Returns:
      this
    • run

      public void run()
      Specified by:
      run in interface Runnable
    • tick

      private void tick()
    • processThreadList

      private void processThreadList(ThreadInfo[] threadInfoList)
    • generateOrdering

      private static void generateOrdering(List<String> lockOrder, ThreadInfo info)
      We cannot simply call getLockedMonitors because it is not guaranteed to return the locks in the correct order.
    • markHigher

      private void markHigher(List<String> lockOrder, ThreadInfo threadInfo)
    • getStackTraceForThread

      private static String getStackTraceForThread(ThreadInfo info)
      Dump data in the same format as ThreadInfo.toString(), but with some modifications (no stack frame limit, and removal of uninteresting stack frames)
    • dumpStackTraceElement

      private static void dumpStackTraceElement(ThreadInfo info, StringBuilder sb, int i, StackTraceElement e)
    • getObjectName

      private static String getObjectName(MonitorInfo info)