363 bool doit_prologue();
364 void doit_epilogue();
365 };
366
367 class VM_PrintJNI: public VM_Operation {
368 private:
369 outputStream* _out;
370 public:
371 VM_PrintJNI() { _out = tty; }
372 VM_PrintJNI(outputStream* out) { _out = out; }
373 VMOp_Type type() const { return VMOp_PrintJNI; }
374 void doit();
375 };
376
377 class DeadlockCycle;
378 class VM_FindDeadlocks: public VM_Operation {
379 private:
380 bool _concurrent_locks;
381 DeadlockCycle* _deadlocks;
382 outputStream* _out;
383
384 public:
385 VM_FindDeadlocks(bool concurrent_locks) : _concurrent_locks(concurrent_locks), _out(NULL), _deadlocks(NULL) {};
386 VM_FindDeadlocks(outputStream* st) : _concurrent_locks(true), _out(st), _deadlocks(NULL) {};
387 ~VM_FindDeadlocks();
388
389 DeadlockCycle* result() { return _deadlocks; };
390 VMOp_Type type() const { return VMOp_FindDeadlocks; }
391 void doit();
392 bool doit_prologue();
393 };
394
395 class ThreadDumpResult;
396 class ThreadSnapshot;
397 class ThreadConcurrentLocks;
398
399 class VM_ThreadDump : public VM_Operation {
400 private:
401 ThreadDumpResult* _result;
402 int _num_threads;
403 GrowableArray<instanceHandle>* _threads;
404 int _max_depth;
405 bool _with_locked_monitors;
|
363 bool doit_prologue();
364 void doit_epilogue();
365 };
366
367 class VM_PrintJNI: public VM_Operation {
368 private:
369 outputStream* _out;
370 public:
371 VM_PrintJNI() { _out = tty; }
372 VM_PrintJNI(outputStream* out) { _out = out; }
373 VMOp_Type type() const { return VMOp_PrintJNI; }
374 void doit();
375 };
376
377 class DeadlockCycle;
378 class VM_FindDeadlocks: public VM_Operation {
379 private:
380 bool _concurrent_locks;
381 DeadlockCycle* _deadlocks;
382 outputStream* _out;
383 ThreadsListSetter _setter; // Helper to set hazard ptr in the originating thread
384 // which protects the JavaThreads in _deadlocks.
385
386 public:
387 VM_FindDeadlocks(bool concurrent_locks) : _concurrent_locks(concurrent_locks), _out(NULL), _deadlocks(NULL), _setter() {};
388 VM_FindDeadlocks(outputStream* st) : _concurrent_locks(true), _out(st), _deadlocks(NULL) {};
389 ~VM_FindDeadlocks();
390
391 DeadlockCycle* result() { return _deadlocks; };
392 VMOp_Type type() const { return VMOp_FindDeadlocks; }
393 void doit();
394 bool doit_prologue();
395 };
396
397 class ThreadDumpResult;
398 class ThreadSnapshot;
399 class ThreadConcurrentLocks;
400
401 class VM_ThreadDump : public VM_Operation {
402 private:
403 ThreadDumpResult* _result;
404 int _num_threads;
405 GrowableArray<instanceHandle>* _threads;
406 int _max_depth;
407 bool _with_locked_monitors;
|