871 void DeadlockCycle::print_on(outputStream* st) const {
872 st->cr();
873 st->print_cr("Found one Java-level deadlock:");
874 st->print("=============================");
875
876 JavaThread* currentThread;
877 ObjectMonitor* waitingToLockMonitor;
878 oop waitingToLockBlocker;
879 int len = _threads->length();
880 for (int i = 0; i < len; i++) {
881 currentThread = _threads->at(i);
882 waitingToLockMonitor = (ObjectMonitor*)currentThread->current_pending_monitor();
883 waitingToLockBlocker = currentThread->current_park_blocker();
884 st->cr();
885 st->print_cr("\"%s\":", currentThread->get_thread_name());
886 const char* owner_desc = ",\n which is held by";
887 if (waitingToLockMonitor != NULL) {
888 st->print(" waiting to lock monitor " INTPTR_FORMAT, waitingToLockMonitor);
889 oop obj = (oop)waitingToLockMonitor->object();
890 if (obj != NULL) {
891 st->print(" (object "INTPTR_FORMAT ", a %s)", (address)obj,
892 (InstanceKlass::cast(obj->klass()))->external_name());
893
894 if (!currentThread->current_pending_monitor_is_from_java()) {
895 owner_desc = "\n in JNI, which is held by";
896 }
897 } else {
898 // No Java object associated - a JVMTI raw monitor
899 owner_desc = " (JVMTI raw monitor),\n which is held by";
900 }
901 currentThread = Threads::owning_thread_from_monitor_owner(
902 (address)waitingToLockMonitor->owner(),
903 false /* no locking needed */);
904 if (currentThread == NULL) {
905 // The deadlock was detected at a safepoint so the JavaThread
906 // that owns waitingToLockMonitor should be findable, but
907 // if it is not findable, then the previous currentThread is
908 // blocked permanently.
909 st->print("%s UNKNOWN_owner_addr=" PTR_FORMAT, owner_desc,
910 (address)waitingToLockMonitor->owner());
911 continue;
|
871 void DeadlockCycle::print_on(outputStream* st) const {
872 st->cr();
873 st->print_cr("Found one Java-level deadlock:");
874 st->print("=============================");
875
876 JavaThread* currentThread;
877 ObjectMonitor* waitingToLockMonitor;
878 oop waitingToLockBlocker;
879 int len = _threads->length();
880 for (int i = 0; i < len; i++) {
881 currentThread = _threads->at(i);
882 waitingToLockMonitor = (ObjectMonitor*)currentThread->current_pending_monitor();
883 waitingToLockBlocker = currentThread->current_park_blocker();
884 st->cr();
885 st->print_cr("\"%s\":", currentThread->get_thread_name());
886 const char* owner_desc = ",\n which is held by";
887 if (waitingToLockMonitor != NULL) {
888 st->print(" waiting to lock monitor " INTPTR_FORMAT, waitingToLockMonitor);
889 oop obj = (oop)waitingToLockMonitor->object();
890 if (obj != NULL) {
891 st->print(" (object " INTPTR_FORMAT ", a %s)", (address)obj,
892 (InstanceKlass::cast(obj->klass()))->external_name());
893
894 if (!currentThread->current_pending_monitor_is_from_java()) {
895 owner_desc = "\n in JNI, which is held by";
896 }
897 } else {
898 // No Java object associated - a JVMTI raw monitor
899 owner_desc = " (JVMTI raw monitor),\n which is held by";
900 }
901 currentThread = Threads::owning_thread_from_monitor_owner(
902 (address)waitingToLockMonitor->owner(),
903 false /* no locking needed */);
904 if (currentThread == NULL) {
905 // The deadlock was detected at a safepoint so the JavaThread
906 // that owns waitingToLockMonitor should be findable, but
907 // if it is not findable, then the previous currentThread is
908 // blocked permanently.
909 st->print("%s UNKNOWN_owner_addr=" PTR_FORMAT, owner_desc,
910 (address)waitingToLockMonitor->owner());
911 continue;
|