hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 22881 b16d7faa638d
parent 22796 bb0ea482a99e
parent 22872 b6902ee5bc8d
child 22916 582da2ed4dfa
child 22907 f978a4a64728
child 22897 77e1024a4a14
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp	Tue Feb 18 09:54:24 2014 -0500
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp	Thu Feb 20 12:20:56 2014 -0800
@@ -1157,7 +1157,11 @@
     MutexLocker x(OopMapCacheAlloc_lock);
     // First time use. Allocate a cache in C heap
     if (_oop_map_cache == NULL) {
-      _oop_map_cache = new OopMapCache();
+      // Release stores from OopMapCache constructor before assignment
+      // to _oop_map_cache. C++ compilers on ppc do not emit the
+      // required memory barrier only because of the volatile
+      // qualifier of _oop_map_cache.
+      OrderAccess::release_store_ptr(&_oop_map_cache, new OopMapCache());
     }
   }
   // _oop_map_cache is constant after init; lookup below does is own locking.