src/hotspot/share/gc/shenandoah/shenandoahTaskqueue.cpp
changeset 53015 632c4baddbb8
parent 52925 9c18c9d839d3
child 53370 687a5c204419
equal deleted inserted replaced
53014:339d2fbe8675 53015:632c4baddbb8
    47     }
    47     }
    48   }
    48   }
    49   return true;
    49   return true;
    50 }
    50 }
    51 
    51 
    52 class ShenandoahOWSTTerminator: public OWSTTaskTerminator {
       
    53 public:
       
    54   ShenandoahOWSTTerminator(uint n_threads, TaskQueueSetSuper* queue_set) :
       
    55     OWSTTaskTerminator(n_threads, queue_set){ }
       
    56 
       
    57 protected:
       
    58   bool exit_termination(size_t tasks, TerminatorTerminator* terminator);
       
    59 };
       
    60 
       
    61 bool ShenandoahOWSTTerminator::exit_termination(size_t tasks, TerminatorTerminator* terminator) {
       
    62   ShenandoahTerminatorTerminator* t = (ShenandoahTerminatorTerminator*)terminator;
       
    63   bool force = (t != NULL) && t->should_force_termination();
       
    64   if (force) {
       
    65     // Force termination : continue termination, even there are remaining tasks.
       
    66     return false;
       
    67   } else {
       
    68     return OWSTTaskTerminator::exit_termination(tasks, terminator);
       
    69   }
       
    70 }
       
    71 
       
    72 ShenandoahTaskTerminator::ShenandoahTaskTerminator(uint n_threads, TaskQueueSetSuper* queue_set) :
    52 ShenandoahTaskTerminator::ShenandoahTaskTerminator(uint n_threads, TaskQueueSetSuper* queue_set) :
    73   _terminator(new ShenandoahOWSTTerminator(n_threads, queue_set)) { }
    53   _terminator(new OWSTTaskTerminator(n_threads, queue_set)) { }
    74 
    54 
    75 ShenandoahTaskTerminator::~ShenandoahTaskTerminator() {
    55 ShenandoahTaskTerminator::~ShenandoahTaskTerminator() {
    76   assert(_terminator != NULL, "Invariant");
    56   assert(_terminator != NULL, "Invariant");
    77   delete _terminator;
    57   delete _terminator;
    78 }
    58 }