Mercurial > hg > graal-jvmci-8
comparison src/share/vm/services/threadService.hpp @ 13391:0b9ea9a72436
8027630: SIGSEGV in const char*Klass::external_name()
Reviewed-by: coleenp, sspitsyn, mgronlun
author | sla |
---|---|
date | Mon, 18 Nov 2013 10:20:13 +0100 |
parents | da91efe96a93 |
children | de6a9e811145 |
comparison
equal
deleted
inserted
replaced
13390:d61a1a166f44 | 13391:0b9ea9a72436 |
---|---|
111 | 111 |
112 static DeadlockCycle* find_deadlocks_at_safepoint(bool object_monitors_only); | 112 static DeadlockCycle* find_deadlocks_at_safepoint(bool object_monitors_only); |
113 | 113 |
114 // GC support | 114 // GC support |
115 static void oops_do(OopClosure* f); | 115 static void oops_do(OopClosure* f); |
116 static void metadata_do(void f(Metadata*)); | |
116 }; | 117 }; |
117 | 118 |
118 // Per-thread Statistics for synchronization | 119 // Per-thread Statistics for synchronization |
119 class ThreadStatistics : public CHeapObj<mtInternal> { | 120 class ThreadStatistics : public CHeapObj<mtInternal> { |
120 private: | 121 private: |
240 ThreadConcurrentLocks* get_concurrent_locks() { return _concurrent_locks; } | 241 ThreadConcurrentLocks* get_concurrent_locks() { return _concurrent_locks; } |
241 | 242 |
242 void dump_stack_at_safepoint(int max_depth, bool with_locked_monitors); | 243 void dump_stack_at_safepoint(int max_depth, bool with_locked_monitors); |
243 void set_concurrent_locks(ThreadConcurrentLocks* l) { _concurrent_locks = l; } | 244 void set_concurrent_locks(ThreadConcurrentLocks* l) { _concurrent_locks = l; } |
244 void oops_do(OopClosure* f); | 245 void oops_do(OopClosure* f); |
246 void metadata_do(void f(Metadata*)); | |
245 }; | 247 }; |
246 | 248 |
247 class ThreadStackTrace : public CHeapObj<mtInternal> { | 249 class ThreadStackTrace : public CHeapObj<mtInternal> { |
248 private: | 250 private: |
249 JavaThread* _thread; | 251 JavaThread* _thread; |
263 | 265 |
264 void add_stack_frame(javaVFrame* jvf); | 266 void add_stack_frame(javaVFrame* jvf); |
265 void dump_stack_at_safepoint(int max_depth); | 267 void dump_stack_at_safepoint(int max_depth); |
266 Handle allocate_fill_stack_trace_element_array(TRAPS); | 268 Handle allocate_fill_stack_trace_element_array(TRAPS); |
267 void oops_do(OopClosure* f); | 269 void oops_do(OopClosure* f); |
270 void metadata_do(void f(Metadata*)); | |
268 GrowableArray<oop>* jni_locked_monitors() { return _jni_locked_monitors; } | 271 GrowableArray<oop>* jni_locked_monitors() { return _jni_locked_monitors; } |
269 int num_jni_locked_monitors() { return (_jni_locked_monitors != NULL ? _jni_locked_monitors->length() : 0); } | 272 int num_jni_locked_monitors() { return (_jni_locked_monitors != NULL ? _jni_locked_monitors->length() : 0); } |
270 | 273 |
271 bool is_owned_monitor_on_stack(oop object); | 274 bool is_owned_monitor_on_stack(oop object); |
272 void add_jni_locked_monitor(oop object) { _jni_locked_monitors->append(object); } | 275 void add_jni_locked_monitor(oop object) { _jni_locked_monitors->append(object); } |
278 class StackFrameInfo : public CHeapObj<mtInternal> { | 281 class StackFrameInfo : public CHeapObj<mtInternal> { |
279 private: | 282 private: |
280 Method* _method; | 283 Method* _method; |
281 int _bci; | 284 int _bci; |
282 GrowableArray<oop>* _locked_monitors; // list of object monitors locked by this frame | 285 GrowableArray<oop>* _locked_monitors; // list of object monitors locked by this frame |
286 // We need to save the mirrors in the backtrace to keep the class | |
287 // from being unloaded while we still have this stack trace. | |
288 oop _class_holder; | |
283 | 289 |
284 public: | 290 public: |
285 | 291 |
286 StackFrameInfo(javaVFrame* jvf, bool with_locked_monitors); | 292 StackFrameInfo(javaVFrame* jvf, bool with_locked_monitors); |
287 ~StackFrameInfo() { | 293 ~StackFrameInfo() { |
288 if (_locked_monitors != NULL) { | 294 if (_locked_monitors != NULL) { |
289 delete _locked_monitors; | 295 delete _locked_monitors; |
290 } | 296 } |
291 }; | 297 }; |
292 Method* method() const { return _method; } | 298 Method* method() const { return _method; } |
293 int bci() const { return _bci; } | 299 int bci() const { return _bci; } |
294 void oops_do(OopClosure* f); | 300 void oops_do(OopClosure* f); |
301 void metadata_do(void f(Metadata*)); | |
295 | 302 |
296 int num_locked_monitors() { return (_locked_monitors != NULL ? _locked_monitors->length() : 0); } | 303 int num_locked_monitors() { return (_locked_monitors != NULL ? _locked_monitors->length() : 0); } |
297 GrowableArray<oop>* locked_monitors() { return _locked_monitors; } | 304 GrowableArray<oop>* locked_monitors() { return _locked_monitors; } |
298 | 305 |
299 void print_on(outputStream* st) const; | 306 void print_on(outputStream* st) const; |
352 ThreadDumpResult* next() { return _next; } | 359 ThreadDumpResult* next() { return _next; } |
353 int num_threads() { return _num_threads; } | 360 int num_threads() { return _num_threads; } |
354 int num_snapshots() { return _num_snapshots; } | 361 int num_snapshots() { return _num_snapshots; } |
355 ThreadSnapshot* snapshots() { return _snapshots; } | 362 ThreadSnapshot* snapshots() { return _snapshots; } |
356 void oops_do(OopClosure* f); | 363 void oops_do(OopClosure* f); |
364 void metadata_do(void f(Metadata*)); | |
357 }; | 365 }; |
358 | 366 |
359 class DeadlockCycle : public CHeapObj<mtInternal> { | 367 class DeadlockCycle : public CHeapObj<mtInternal> { |
360 private: | 368 private: |
361 bool _is_deadlock; | 369 bool _is_deadlock; |