8215220: Simplify Shenandoah task termination in aborted paths

Reviewed-by: shade
This commit is contained in:
Zhengyu Gu 2018-12-12 13:50:57 -05:00
parent e7722158fd
commit a85ad0aa18
4 changed files with 10 additions and 47 deletions

View file

@ -49,28 +49,8 @@ bool ShenandoahObjToScanQueueSet::is_empty() {
return true;
}
class ShenandoahOWSTTerminator: public OWSTTaskTerminator {
public:
ShenandoahOWSTTerminator(uint n_threads, TaskQueueSetSuper* queue_set) :
OWSTTaskTerminator(n_threads, queue_set){ }
protected:
bool exit_termination(size_t tasks, TerminatorTerminator* terminator);
};
bool ShenandoahOWSTTerminator::exit_termination(size_t tasks, TerminatorTerminator* terminator) {
ShenandoahTerminatorTerminator* t = (ShenandoahTerminatorTerminator*)terminator;
bool force = (t != NULL) && t->should_force_termination();
if (force) {
// Force termination : continue termination, even there are remaining tasks.
return false;
} else {
return OWSTTaskTerminator::exit_termination(tasks, terminator);
}
}
ShenandoahTaskTerminator::ShenandoahTaskTerminator(uint n_threads, TaskQueueSetSuper* queue_set) :
_terminator(new ShenandoahOWSTTerminator(n_threads, queue_set)) { }
_terminator(new OWSTTaskTerminator(n_threads, queue_set)) { }
ShenandoahTaskTerminator::~ShenandoahTaskTerminator() {
assert(_terminator != NULL, "Invariant");