src/hotspot/share/gc/parallel/psScavenge.cpp
changeset 50058 f7e564cacfbc
parent 50049 9d17c375dc30
child 50071 758deedaae84
--- a/src/hotspot/share/gc/parallel/psScavenge.cpp	Mon May 07 14:57:25 2018 +0200
+++ b/src/hotspot/share/gc/parallel/psScavenge.cpp	Mon May 07 16:12:07 2018 +0200
@@ -242,6 +242,17 @@
   return full_gc_done;
 }
 
+class PSAddThreadRootsTaskClosure : public ThreadClosure {
+private:
+  GCTaskQueue* _q;
+
+public:
+  PSAddThreadRootsTaskClosure(GCTaskQueue* q) : _q(q) { }
+  void do_thread(Thread* t) {
+    _q->enqueue(new ThreadRootsTask(t));
+  }
+};
+
 // This method contains no policy. You should probably
 // be calling invoke() instead.
 bool PSScavenge::invoke_no_policy() {
@@ -382,7 +393,8 @@
       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe));
       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles));
       // We scan the thread roots in parallel
-      Threads::create_thread_roots_tasks(q);
+      PSAddThreadRootsTaskClosure cl(q);
+      Threads::java_threads_and_vm_thread_do(&cl);
       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer));
       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));