Top Description Fields Constructors Methods
org.h2.util

public Class AbbaLockingDetector

extends Object
implements Runnable
Class Inheritance
All Implemented Interfaces
java.lang.Runnable
Imports
java.lang.management.ManagementFactory, .MonitorInfo, .ThreadInfo, .ThreadMXBean, java.util.ArrayList, .Arrays, .HashSet, .List, .Map, .Set, .WeakHashMap

Utility to detect AB-BA deadlocks.

Field Summary

Modifier and TypeField and Description
private final Set<String>
private final Map<String, Map<String, String>>
lockOrdering

Map of (object A) -> ( map of (object locked before object A) -> (stack trace where locked) )

private volatile boolean
private Thread
private final ThreadMXBean
private final int

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
private static void
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.

private static String
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)

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

private void
processThreadList(ThreadInfo[] threadInfoList)

public synchronized void
reset()

Reset the state.

public void
run()

Implements java.lang.Runnable.run.

Runs this operation.

public AbbaLockingDetector

Returns:

this
startCollecting
()

Start collecting locking data.

public AbbaLockingDetector

Returns:

this
stopCollecting
()

Stop collecting.

private void
tick()

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

knownDeadlocksback to summary
private final Set<String> knownDeadlocks
lockOrderingback to summary
private final Map<String, Map<String, String>> lockOrdering

Map of (object A) -> ( map of (object locked before object A) -> (stack trace where locked) )

stopback to summary
private volatile boolean stop
threadback to summary
private Thread thread
threadMXBeanback to summary
private final ThreadMXBean threadMXBean
tickIntervalMsback to summary
private final int tickIntervalMs

Constructor Detail

AbbaLockingDetectorback to summary
public AbbaLockingDetector()

Method Detail

dumpStackTraceElementback to summary
private static void dumpStackTraceElement(ThreadInfo info, StringBuilder sb, int i, StackTraceElement e)
generateOrderingback to summary
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.

getObjectNameback to summary
private static String getObjectName(MonitorInfo info)
getStackTraceForThreadback to summary
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)

markHigherback to summary
private synchronized void markHigher(List<String> lockOrder, ThreadInfo threadInfo)
processThreadListback to summary
private void processThreadList(ThreadInfo[] threadInfoList)
resetback to summary
public synchronized void reset()

Reset the state.

runback to summary
public void run()

Implements java.lang.Runnable.run.

Doc from java.lang.Runnable.run.

Runs this operation.

Annotations
@Override
startCollectingback to summary
public AbbaLockingDetector startCollecting()

Start collecting locking data.

Returns:AbbaLockingDetector

this

stopCollectingback to summary
public AbbaLockingDetector stopCollecting()

Stop collecting.

Returns:AbbaLockingDetector

this

tickback to summary
private void tick()