diff -r 5e8f9713e343 -r 3636bab5e81e src/hotspot/share/runtime/vmThread.hpp --- a/src/hotspot/share/runtime/vmThread.hpp Fri Nov 29 11:26:25 2019 +0100 +++ b/src/hotspot/share/runtime/vmThread.hpp Fri Nov 29 12:09:25 2019 +0100 @@ -30,6 +30,11 @@ #include "runtime/task.hpp" #include "runtime/vmOperations.hpp" +class VM_QueueHead : public VM_None { + public: + VM_QueueHead() : VM_None("QueueHead") {} +}; + // // Prioritized queue of VM operations. // @@ -52,14 +57,15 @@ // can scan them from oops_do VM_Operation* _drain_list; + static VM_QueueHead _queue_head[nof_priorities]; + // Double-linked non-empty list insert. void insert(VM_Operation* q,VM_Operation* n); void unlink(VM_Operation* q); // Basic queue manipulation bool queue_empty (int prio); - void queue_add_front (int prio, VM_Operation *op); - void queue_add_back (int prio, VM_Operation *op); + void queue_add (int prio, VM_Operation *op); VM_Operation* queue_remove_front(int prio); void queue_oops_do(int queue, OopClosure* f); void drain_list_oops_do(OopClosure* f); @@ -73,7 +79,6 @@ // Highlevel operations. Encapsulates policy void add(VM_Operation *op); VM_Operation* remove_next(); // Returns next or null - VM_Operation* remove_next_at_safepoint_priority() { return queue_remove_front(SafepointPriority); } VM_Operation* drain_at_safepoint_priority() { return queue_drain(SafepointPriority); } void set_drain_list(VM_Operation* list) { _drain_list = list; } bool peek_at_safepoint_priority() { return queue_peek(SafepointPriority); } @@ -139,10 +144,10 @@ // Tester bool is_VM_thread() const { return true; } - bool is_GC_thread() const { return true; } // The ever running loop for the VMThread void loop(); + static void check_for_forced_cleanup(); // Called to stop the VM thread static void wait_for_vm_thread_exit();