< prev index next >
src/hotspot/share/runtime/vmThread.hpp
Print this page
rev 52955 : 8181143: Introduce diagnostic flag to abort VM on too long VM operations
Reviewed-by: XXX
*** 25,34 ****
--- 25,35 ----
#ifndef SHARE_VM_RUNTIME_VMTHREAD_HPP
#define SHARE_VM_RUNTIME_VMTHREAD_HPP
#include "runtime/perfData.hpp"
#include "runtime/thread.hpp"
+ #include "runtime/task.hpp"
#include "runtime/vmOperations.hpp"
//
// Prioritized queue of VM operations.
//
*** 82,91 ****
--- 83,112 ----
void verify_queue(int prio) PRODUCT_RETURN;
};
+ // VM operation timeout handling: warn or abort the VM when VM operation takes
+ // too long. Periodic tasks do not participate in safepoint protocol, and therefore
+ // can fire when application threads are stopped.
+
+ class VMOperationTimeoutTask : public PeriodicTask {
+ private:
+ volatile int _armed;
+ jlong _arm_time;
+
+ public:
+ VMOperationTimeoutTask(size_t interval_time) :
+ PeriodicTask(interval_time), _armed(0), _arm_time(0) {}
+
+ virtual void task();
+
+ bool is_armed();
+ void arm();
+ void disarm();
+ };
+
//
// A single VMThread (the primordial thread) spawns all other threads
// and is itself used by other threads to offload heavy vm operations
// like scavenge, garbage_collect etc.
//
*** 99,108 ****
--- 120,131 ----
static Monitor * _terminate_lock;
static PerfCounter* _perf_accumulated_vm_operation_time;
static const char* _no_op_reason;
+ static VMOperationTimeoutTask* _timeout_task;
+
static bool no_op_safepoint_needed(bool check_time);
void evaluate_operation(VM_Operation* op);
public:
< prev index next >