< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp

Print this page
*** 27,14 ***
--- 27,16 ---
  #include "code/nmethod.hpp"
  #include "gc/shared/classUnloadingContext.hpp"
  #include "gc/shenandoah/shenandoahClosures.inline.hpp"
  #include "gc/shenandoah/shenandoahHeap.inline.hpp"
  #include "gc/shenandoah/shenandoahNMethod.inline.hpp"
+ #include "gc/shenandoah/shenandoahStackWatermark.hpp"
  #include "gc/shenandoah/shenandoahUtils.hpp"
  #include "memory/resourceArea.hpp"
  #include "memory/universe.hpp"
  #include "runtime/atomicAccess.hpp"
+ #include "runtime/icache.hpp"
  #include "utilities/powerOfTwo.hpp"
  
  
  ShenandoahNMethodTable* ShenandoahCodeRoots::_nmethod_table;
  int ShenandoahCodeRoots::_disarmed_value = 1;

*** 51,44 ***
  void ShenandoahCodeRoots::unregister_nmethod(nmethod* nm) {
    assert_locked_or_safepoint(CodeCache_lock);
    _nmethod_table->unregister_nmethod(nm);
  }
  
- void ShenandoahCodeRoots::arm_nmethods() {
-   BarrierSet::barrier_set()->barrier_set_nmethod()->arm_all_nmethods();
- }
- 
- class ShenandoahDisarmNMethodClosure : public NMethodClosure {
- public:
-   virtual void do_nmethod(nmethod* nm) {
-     ShenandoahNMethod::disarm_nmethod(nm);
-   }
- };
- 
- class ShenandoahDisarmNMethodsTask : public WorkerTask {
- private:
-   ShenandoahDisarmNMethodClosure      _cl;
-   ShenandoahConcurrentNMethodIterator _iterator;
- 
- public:
-   ShenandoahDisarmNMethodsTask() :
-     WorkerTask("Shenandoah Disarm NMethods"),
-     _iterator(ShenandoahCodeRoots::table()) {
-     assert(SafepointSynchronize::is_at_safepoint(), "Only at a safepoint");
-   }
- 
-   virtual void work(uint worker_id) {
-     ShenandoahParallelWorkerSession worker_session(worker_id);
-     _iterator.nmethods_do(&_cl);
-   }
- };
- 
- void ShenandoahCodeRoots::disarm_nmethods() {
-   ShenandoahDisarmNMethodsTask task;
-   ShenandoahHeap::heap()->workers()->run_task(&task);
- }
- 
  class ShenandoahNMethodUnlinkClosure : public NMethodClosure {
  private:
    bool                      _unloading_occurred;
    ShenandoahHeap* const     _heap;
    BarrierSetNMethod* const  _bs;
--- 53,10 ---

*** 114,11 ***
      if (_heap->is_evacuation_in_progress()) {
        ShenandoahNMethodLocker locker(nm_data->lock());
  
        // Heal oops
        if (_bs->is_armed(nm)) {
!         ShenandoahNMethod::heal_nmethod_metadata(nm_data);
          // Must remain armed to complete remaining work in nmethod entry barrier
          assert(_bs->is_armed(nm), "Should remain armed");
        }
      }
  
--- 82,12 ---
      if (_heap->is_evacuation_in_progress()) {
        ShenandoahNMethodLocker locker(nm_data->lock());
  
        // Heal oops
        if (_bs->is_armed(nm)) {
!         ICacheInvalidationContext icic;
+         ShenandoahNMethod::heal_nmethod_metadata(nm_data, &icic);
          // Must remain armed to complete remaining work in nmethod entry barrier
          assert(_bs->is_armed(nm), "Should remain armed");
        }
      }
  
< prev index next >