724 // add locked objects for this frame into list
725 err = get_locked_objects_in_frame(calling_thread, java_thread, jvf, owned_monitors_list, depth-1);
726 if (err != JVMTI_ERROR_NONE) {
727 return err;
728 }
729 }
730 }
731 }
732
733 // Get off stack monitors. (e.g. acquired via jni MonitorEnter).
734 JvmtiMonitorClosure jmc(java_thread, calling_thread, owned_monitors_list, this);
735 ObjectSynchronizer::monitors_iterate(&jmc);
736 err = jmc.error();
737
738 return err;
739 }
740
741 // Save JNI local handles for any objects that this frame owns.
742 jvmtiError
743 JvmtiEnvBase::get_locked_objects_in_frame(JavaThread* calling_thread, JavaThread* java_thread,
744 javaVFrame *jvf, GrowableArray<jvmtiMonitorStackDepthInfo*>* owned_monitors_list, int stack_depth) {
745 jvmtiError err = JVMTI_ERROR_NONE;
746 ResourceMark rm;
747
748 GrowableArray<MonitorInfo*>* mons = jvf->monitors();
749 if (mons->is_empty()) {
750 return err; // this javaVFrame holds no monitors
751 }
752
753 HandleMark hm;
754 oop wait_obj = NULL;
755 {
756 // save object of current wait() call (if any) for later comparison
757 ObjectMonitor *mon = java_thread->current_waiting_monitor();
758 if (mon != NULL) {
759 wait_obj = (oop)mon->object();
760 }
761 }
762 oop pending_obj = NULL;
763 {
764 // save object of current enter() call (if any) for later comparison
|
724 // add locked objects for this frame into list
725 err = get_locked_objects_in_frame(calling_thread, java_thread, jvf, owned_monitors_list, depth-1);
726 if (err != JVMTI_ERROR_NONE) {
727 return err;
728 }
729 }
730 }
731 }
732
733 // Get off stack monitors. (e.g. acquired via jni MonitorEnter).
734 JvmtiMonitorClosure jmc(java_thread, calling_thread, owned_monitors_list, this);
735 ObjectSynchronizer::monitors_iterate(&jmc);
736 err = jmc.error();
737
738 return err;
739 }
740
741 // Save JNI local handles for any objects that this frame owns.
742 jvmtiError
743 JvmtiEnvBase::get_locked_objects_in_frame(JavaThread* calling_thread, JavaThread* java_thread,
744 javaVFrame *jvf, GrowableArray<jvmtiMonitorStackDepthInfo*>* owned_monitors_list, jint stack_depth) {
745 jvmtiError err = JVMTI_ERROR_NONE;
746 ResourceMark rm;
747
748 GrowableArray<MonitorInfo*>* mons = jvf->monitors();
749 if (mons->is_empty()) {
750 return err; // this javaVFrame holds no monitors
751 }
752
753 HandleMark hm;
754 oop wait_obj = NULL;
755 {
756 // save object of current wait() call (if any) for later comparison
757 ObjectMonitor *mon = java_thread->current_waiting_monitor();
758 if (mon != NULL) {
759 wait_obj = (oop)mon->object();
760 }
761 }
762 oop pending_obj = NULL;
763 {
764 // save object of current enter() call (if any) for later comparison
|