< prev index next >

src/hotspot/share/code/dependencyContext.hpp

Print this page

 93   // Safepoints are forbidden during DC lifetime. GC can invalidate
 94   // _dependency_context_addr if it relocates the holder
 95   SafepointStateTracker _safepoint_tracker;
 96 
 97   DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
 98     : _dependency_context_addr(bucket_addr),
 99       _last_cleanup_addr(last_cleanup_addr),
100       _safepoint_tracker(SafepointSynchronize::safepoint_state_tracker()) {}
101 
102   ~DependencyContext() {
103     assert(!_safepoint_tracker.safepoint_state_changed(), "must be the same safepoint");
104   }
105 #else
106   DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
107     : _dependency_context_addr(bucket_addr),
108       _last_cleanup_addr(last_cleanup_addr) {}
109 #endif // ASSERT
110 
111   static void init();
112 
113   void mark_dependent_nmethods(DeoptimizationScope* deopt_scope, DepChange& changes);
114   void add_dependent_nmethod(nmethod* nm);
115   void remove_all_dependents();
116   void clean_unloading_dependents();
117   static void purge_dependency_contexts();
118   static void release(nmethodBucket* b);
119   static void cleaning_start();
120   static void cleaning_end();
121 
122 #ifndef PRODUCT
123   void print_dependent_nmethods(bool verbose);
124   bool is_empty();
125 #endif //PRODUCT
126   bool is_dependent_nmethod(nmethod* nm);
127 };
128 #endif // SHARE_CODE_DEPENDENCYCONTEXT_HPP

 93   // Safepoints are forbidden during DC lifetime. GC can invalidate
 94   // _dependency_context_addr if it relocates the holder
 95   SafepointStateTracker _safepoint_tracker;
 96 
 97   DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
 98     : _dependency_context_addr(bucket_addr),
 99       _last_cleanup_addr(last_cleanup_addr),
100       _safepoint_tracker(SafepointSynchronize::safepoint_state_tracker()) {}
101 
102   ~DependencyContext() {
103     assert(!_safepoint_tracker.safepoint_state_changed(), "must be the same safepoint");
104   }
105 #else
106   DependencyContext(nmethodBucket* volatile* bucket_addr, volatile uint64_t* last_cleanup_addr)
107     : _dependency_context_addr(bucket_addr),
108       _last_cleanup_addr(last_cleanup_addr) {}
109 #endif // ASSERT
110 
111   static void init();
112 
113   void mark_dependent_nmethods(DeoptimizationScope* deopt_scope, DepChange& changes, InstanceKlass* context = nullptr);
114   void add_dependent_nmethod(nmethod* nm);
115   void remove_all_dependents();
116   void clean_unloading_dependents();
117   static void purge_dependency_contexts();
118   static void release(nmethodBucket* b);
119   static void cleaning_start();
120   static void cleaning_end();
121 
122 #ifndef PRODUCT
123   void print_dependent_nmethods(bool verbose);
124   bool is_empty();
125 #endif //PRODUCT
126   bool is_dependent_nmethod(nmethod* nm);
127 };
128 #endif // SHARE_CODE_DEPENDENCYCONTEXT_HPP
< prev index next >