--- old/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp 2020-01-16 01:05:15.656200883 -0500 +++ new/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp 2020-01-16 01:05:15.324182959 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,24 +45,25 @@ uint _worker_id; - bool _active; - Monitor* _monitor; + // Each thread has its own semaphore. The i-th thread is responsible for + // signaling thread i+1 if the number of buffers in the queue exceeds a + // threshold for that thread. Semaphores are also used to wake up the + // threads during termination. The 0th (primary) worker is notified by + // mutator threads. + Semaphore* _notifier; + volatile bool _should_notify; + bool maybe_deactivate(bool more_work); + G1ConcurrentRefine* _cr; void wait_for_completed_buffers(); - void set_active(bool x) { _active = x; } - // Deactivate this thread. - void deactivate(); - - bool is_primary() { return (_worker_id == 0); } + virtual void run_service(); + virtual void stop_service(); - void run_service(); - void stop_service(); public: G1ConcurrentRefineThread(G1ConcurrentRefine* cg1r, uint worker_id); - bool is_active(); // Activate this thread. void activate();