equal
deleted
inserted
replaced
79 } |
79 } |
80 |
80 |
81 // Check for entries that reference an unloaded method |
81 // Check for entries that reference an unloaded method |
82 class PrepareExtraDataClosure : public CleanExtraDataClosure { |
82 class PrepareExtraDataClosure : public CleanExtraDataClosure { |
83 MethodData* _mdo; |
83 MethodData* _mdo; |
84 uint64_t _safepoint_counter; |
84 SafepointStateTracker _safepoint_tracker; |
85 GrowableArray<Method*> _uncached_methods; |
85 GrowableArray<Method*> _uncached_methods; |
86 |
86 |
87 public: |
87 public: |
88 PrepareExtraDataClosure(MethodData* mdo) |
88 PrepareExtraDataClosure(MethodData* mdo) |
89 : _mdo(mdo), |
89 : _mdo(mdo), |
90 _safepoint_counter(SafepointSynchronize::safepoint_counter()), |
90 _safepoint_tracker(SafepointSynchronize::safepoint_state_tracker()), |
91 _uncached_methods() |
91 _uncached_methods() |
92 { } |
92 { } |
93 |
93 |
94 bool is_live(Method* m) { |
94 bool is_live(Method* m) { |
95 if (!m->method_holder()->is_loader_alive()) { |
95 if (!m->method_holder()->is_loader_alive()) { |
101 } |
101 } |
102 return true; |
102 return true; |
103 } |
103 } |
104 |
104 |
105 bool has_safepointed() { |
105 bool has_safepointed() { |
106 return SafepointSynchronize::safepoint_counter() != _safepoint_counter; |
106 return _safepoint_tracker.safepoint_state_changed(); |
107 } |
107 } |
108 |
108 |
109 bool finish() { |
109 bool finish() { |
110 if (_uncached_methods.length() == 0) { |
110 if (_uncached_methods.length() == 0) { |
111 // Preparation finished iff all Methods* were already cached. |
111 // Preparation finished iff all Methods* were already cached. |