< prev index next >

src/hotspot/share/code/dependencyContext.hpp

Print this page

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

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