equal
deleted
inserted
replaced
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 } |