src/share/vm/utilities/workgroup.hpp

Print this page
rev 6345 : 8040803: G1: Concurrent mark hangs when mark stack overflows
Reviewed-by: TDB

*** 360,378 **** protected: Monitor _monitor; uint _n_workers; uint _n_completed; bool _should_reset; Monitor* monitor() { return &_monitor; } uint n_workers() { return _n_workers; } uint n_completed() { return _n_completed; } bool should_reset() { return _should_reset; } void zero_completed() { _n_completed = 0; } void inc_completed() { _n_completed++; } ! void set_should_reset(bool v) { _should_reset = v; } public: WorkGangBarrierSync(); WorkGangBarrierSync(uint n_workers, const char* name); --- 360,380 ---- protected: Monitor _monitor; uint _n_workers; uint _n_completed; bool _should_reset; + bool _aborted; Monitor* monitor() { return &_monitor; } uint n_workers() { return _n_workers; } uint n_completed() { return _n_completed; } bool should_reset() { return _should_reset; } + bool aborted() { return _aborted; } void zero_completed() { _n_completed = 0; } void inc_completed() { _n_completed++; } ! void set_aborted() { _aborted = true; } void set_should_reset(bool v) { _should_reset = v; } public: WorkGangBarrierSync(); WorkGangBarrierSync(uint n_workers, const char* name);
*** 381,392 **** // Must be called before any of the workers start running. void set_n_workers(uint n_workers); // Enter the barrier. A worker that enters the barrier will // not be allowed to leave until all other threads have ! // also entered the barrier. ! void enter(); }; // A class to manage claiming of subtasks within a group of tasks. The // subtasks will be identified by integer indices, usually elements of an // enumeration type. --- 383,400 ---- // Must be called before any of the workers start running. void set_n_workers(uint n_workers); // Enter the barrier. A worker that enters the barrier will // not be allowed to leave until all other threads have ! // also entered the barrier or the barrier is aborted. ! // Returns false if the barrier was aborted. ! bool enter(); ! ! // Aborts the barrier and wakes up any threads waiting for ! // the barrier to complete. The barrier will remain in the ! // aborted state until the next call to set_n_workers(). ! void abort(); }; // A class to manage claiming of subtasks within a group of tasks. The // subtasks will be identified by integer indices, usually elements of an // enumeration type.