< prev index next >

src/share/vm/services/threadService.cpp

Print this page




 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;


< prev index next >