src/share/vm/services/threadService.hpp

Print this page
rev 5644 : imported patch 8027630-stackframeinfo

*** 111,120 **** --- 111,121 ---- static DeadlockCycle* find_deadlocks_at_safepoint(bool object_monitors_only); // GC support static void oops_do(OopClosure* f); + static void metadata_do(void f(Metadata*)); }; // Per-thread Statistics for synchronization class ThreadStatistics : public CHeapObj<mtInternal> { private:
*** 240,249 **** --- 241,251 ---- ThreadConcurrentLocks* get_concurrent_locks() { return _concurrent_locks; } void dump_stack_at_safepoint(int max_depth, bool with_locked_monitors); void set_concurrent_locks(ThreadConcurrentLocks* l) { _concurrent_locks = l; } void oops_do(OopClosure* f); + void metadata_do(void f(Metadata*)); }; class ThreadStackTrace : public CHeapObj<mtInternal> { private: JavaThread* _thread;
*** 263,272 **** --- 265,275 ---- void add_stack_frame(javaVFrame* jvf); void dump_stack_at_safepoint(int max_depth); Handle allocate_fill_stack_trace_element_array(TRAPS); void oops_do(OopClosure* f); + void metadata_do(void f(Metadata*)); GrowableArray<oop>* jni_locked_monitors() { return _jni_locked_monitors; } int num_jni_locked_monitors() { return (_jni_locked_monitors != NULL ? _jni_locked_monitors->length() : 0); } bool is_owned_monitor_on_stack(oop object); void add_jni_locked_monitor(oop object) { _jni_locked_monitors->append(object); }
*** 278,287 **** --- 281,293 ---- class StackFrameInfo : public CHeapObj<mtInternal> { private: Method* _method; int _bci; GrowableArray<oop>* _locked_monitors; // list of object monitors locked by this frame + // We need to save the mirrors in the backtrace to keep the class + // from being unloaded while we still have this stack trace. + oop _class_holder; public: StackFrameInfo(javaVFrame* jvf, bool with_locked_monitors); ~StackFrameInfo() {
*** 290,299 **** --- 296,306 ---- } }; Method* method() const { return _method; } int bci() const { return _bci; } void oops_do(OopClosure* f); + void metadata_do(void f(Metadata*)); int num_locked_monitors() { return (_locked_monitors != NULL ? _locked_monitors->length() : 0); } GrowableArray<oop>* locked_monitors() { return _locked_monitors; } void print_on(outputStream* st) const;
*** 352,361 **** --- 359,369 ---- ThreadDumpResult* next() { return _next; } int num_threads() { return _num_threads; } int num_snapshots() { return _num_snapshots; } ThreadSnapshot* snapshots() { return _snapshots; } void oops_do(OopClosure* f); + void metadata_do(void f(Metadata*)); }; class DeadlockCycle : public CHeapObj<mtInternal> { private: bool _is_deadlock;