40 ShenandoahPushWorkerScope::ShenandoahPushWorkerScope(WorkGang* workers, uint nworkers, bool check) :
41 _workers(workers), _old_workers(workers->active_workers()), _n_workers(nworkers) {
42 _workers->update_active_workers(nworkers);
43
44 // bypass concurrent/parallel protocol check for non-regular paths, e.g. verifier, etc.
45 if (!check) {
46 ShenandoahHeap::heap()->assert_gc_workers(nworkers);
47 }
48 }
49
50 ShenandoahPushWorkerScope::~ShenandoahPushWorkerScope() {
51 assert(_workers->active_workers() == _n_workers,
52 "Active workers can not be changed within this scope");
53 // Restore old worker value
54 _workers->update_active_workers(_old_workers);
55 }
56
57 AbstractGangWorker* ShenandoahWorkGang::install_worker(uint which) {
58 AbstractGangWorker* worker = WorkGang::install_worker(which);
59 if (_initialize_gclab) {
60 worker->gclab().initialize(true);
61 }
62
63 return worker;
64 }
|
40 ShenandoahPushWorkerScope::ShenandoahPushWorkerScope(WorkGang* workers, uint nworkers, bool check) :
41 _workers(workers), _old_workers(workers->active_workers()), _n_workers(nworkers) {
42 _workers->update_active_workers(nworkers);
43
44 // bypass concurrent/parallel protocol check for non-regular paths, e.g. verifier, etc.
45 if (!check) {
46 ShenandoahHeap::heap()->assert_gc_workers(nworkers);
47 }
48 }
49
50 ShenandoahPushWorkerScope::~ShenandoahPushWorkerScope() {
51 assert(_workers->active_workers() == _n_workers,
52 "Active workers can not be changed within this scope");
53 // Restore old worker value
54 _workers->update_active_workers(_old_workers);
55 }
56
57 AbstractGangWorker* ShenandoahWorkGang::install_worker(uint which) {
58 AbstractGangWorker* worker = WorkGang::install_worker(which);
59 if (_initialize_gclab) {
60 ShenandoahHeap::heap()->initialize_gclab(worker);
61 }
62
63 return worker;
64 }
|