src/share/vm/code/dependencyContext.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/code/dependencyContext.hpp	Wed Nov 25 15:13:13 2015
--- new/src/share/vm/code/dependencyContext.hpp	Wed Nov 25 15:13:13 2015

*** 112,134 **** --- 112,131 ---- static PerfCounter* _perf_total_buckets_stale_count; static PerfCounter* _perf_total_buckets_stale_acc_count; public: #ifdef ASSERT // Verification for dependency contexts rooted at Java objects. Handle _base; // non-NULL if dependency context resides in an oop (e.g. CallSite). oop _base_oop; DependencyContext(intptr_t* addr, Handle base = Handle()) : _dependency_context_addr(addr), _base(base) { _base_oop = _base(); } + // Safepoints are forbidden during DC lifetime. GC can invalidate + // _dependency_context_addr if it relocates the holder + // (e.g. CallSiteContext Java object). + int _safepoint_counter; + + DependencyContext(intptr_t* addr) : _dependency_context_addr(addr), + _safepoint_counter(SafepointSynchronize::_safepoint_counter) {} ~DependencyContext() { // Base oop relocation invalidates _dependency_context_addr. assert(_base_oop == _base(), "base oop relocation is forbidden"); + assert(_safepoint_counter == SafepointSynchronize::_safepoint_counter, "safepoint happened"); } #else DependencyContext(intptr_t* addr) : _dependency_context_addr(addr) {} #endif // ASSERT

src/share/vm/code/dependencyContext.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File