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.