< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp

Print this page
@@ -140,19 +140,16 @@
  }
  
  template <bool CONCURRENT, bool STABLE_THREAD>
  template <class T>
  void ShenandoahEvacuateUpdateRootClosureBase<CONCURRENT, STABLE_THREAD>::do_oop_work(T* p) {
-   assert(_heap->is_concurrent_weak_root_in_progress() ||
-          _heap->is_concurrent_strong_root_in_progress(),
-          "Only do this in root processing phase");
+   assert(_heap->is_evacuation_in_progress(), "Performance: no reason to call this otherwise");
  
    T o = RawAccess<>::oop_load(p);
    if (!CompressedOops::is_null(o)) {
      oop obj = CompressedOops::decode_not_null(o);
      if (_heap->in_collection_set(obj)) {
-       assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
        shenandoah_assert_marked(p, obj);
        oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
        if (resolved == obj) {
          Thread* thr = STABLE_THREAD ? _thread : Thread::current();
          assert(thr == Thread::current(), "Wrong thread");

@@ -200,16 +197,17 @@
  ShenandoahNMethodAndDisarmClosure::ShenandoahNMethodAndDisarmClosure(OopClosure* cl) :
    NMethodToOopClosure(cl, true /* fix_relocations */) {}
  
  void ShenandoahNMethodAndDisarmClosure::do_nmethod(nmethod* nm) {
    assert(nm != nullptr, "Sanity");
-   assert(!ShenandoahNMethod::gc_data(nm)->is_unregistered(), "Should not be here");
+   ShenandoahNMethod* data = ShenandoahNMethod::gc_data(nm);
+   ShenandoahNMethodLocker locker(data->lock());
+   assert(!data->is_unregistered(), "Should not be here");
    NMethodToOopClosure::do_nmethod(nm);
-   ShenandoahNMethod::disarm_nmethod(nm);
+   ShenandoahNMethod::complete_and_disarm_nmethod(nm);
  }
  
- 
  //
  // ========= Update References
  //
  
  template <ShenandoahGenerationType GENERATION>
< prev index next >