also dump the writer/owner thread if any

This commit is contained in:
Axel Uhl committed 2012-09-28 15:05:45 +02:00
1 parent 8519fcd2f0
commit cb954f7ec5
2 files changed
+17 -4

No files matched your search

@@ -37,12 +37,14 @@ public class LockUtil {
message.append(NUMBER_OF_SECONDS_TO_WAIT_FOR_LOCK);
message.append("s at ");
message.append(getCurrentStackTrace());
Thread writer = lockParent.getWriter();
if (writer != null) {
message.append("\nThe current writer is:\n");
appendThreadData(message, writer);
}
message.append("\nThe current readers are:\n");
for (Thread reader : lockParent.getReaders()) {
message.append(reader);
message.append('\n');
message.append(getStackTrace(reader));
message.append('\n');
appendThreadData(message, reader);
}
message.append("Trying again...");
logger.info(message.toString());
@@ -58,6 +60,13 @@ public class LockUtil {
Thread.currentThread().interrupt();
}
}
private static void appendThreadData(StringBuilder message, Thread writer) {
message.append(writer);
message.append('\n');
message.append(getStackTrace(writer));
message.append('\n');
}
public static void lockForRead(NamedReentrantReadWriteLock lock) {
lock(lock.readLock(), "readLock "+lock.getName(), lock);
@@ -165,6 +165,10 @@ public class NamedReentrantReadWriteLock extends ReentrantReadWriteLock implemen
return new ArrayList<Thread>(readers);
}
public Thread getWriter() {
return getOwner();
}
@Override
public String toString() {
return "ReentrantReadWriteLock "+getName()+" ("+(isFair()?"fair":"unfair")+")";