diff -r 4ddd3c410a85 -r c403f39ec349 src/hotspot/share/runtime/vmThread.hpp --- a/src/hotspot/share/runtime/vmThread.hpp Thu Dec 13 10:35:09 2018 -0500 +++ b/src/hotspot/share/runtime/vmThread.hpp Thu Dec 13 16:45:24 2018 +0100 @@ -27,6 +27,7 @@ #include "runtime/perfData.hpp" #include "runtime/thread.hpp" +#include "runtime/task.hpp" #include "runtime/vmOperations.hpp" // @@ -84,6 +85,26 @@ }; +// 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 @@ -101,6 +122,8 @@ 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);