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;