./src/share/vm/oops/instanceKlass.hpp

Print this page
rev 4331 : review #1

@@ -181,14 +181,15 @@
  protected:
   // Protection domain.
   oop             _protection_domain;
   // Class signers.
   objArrayOop     _signers;
-  // Initialization lock.  Must be one per class and it has to be a VM internal
-  // object so java code cannot lock it (like the mirror)
+  // Lock for (1) initialization; (2) access to the ConstantPool of this class.
+  // Must be one per class and it has to be a VM internal object so java code
+  // cannot lock it (like the mirror).
   // It has to be an object not a Mutex because it's held through java calls.
-  volatile oop    _init_lock;
+  volatile oop    _per_class_lock;
 
   // Annotations for this class
   Annotations*    _annotations;
   // Array classes holding elements of this class.
   Klass*          _array_klasses;

@@ -964,10 +965,13 @@
   ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceKlass_OOP_OOP_ITERATE_BACKWARDS_DECL)
   ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceKlass_OOP_OOP_ITERATE_BACKWARDS_DECL)
 #endif // INCLUDE_ALL_GCS
 
   u2 idnum_allocated_count() const      { return _idnum_allocated_count; }
+
+  oop cp_lock() const                   { return _per_class_lock; }
+
 private:
   // initialization state
 #ifdef ASSERT
   void set_init_state(ClassState state);
 #else

@@ -990,18 +994,17 @@
          { return (int*)OrderAccess::load_ptr_acquire(&_methods_cached_itable_indices); }
   void release_set_methods_cached_itable_indices(int* indices)
          { OrderAccess::release_store_ptr(&_methods_cached_itable_indices, indices); }
 
   // Lock during initialization
-  volatile oop init_lock() const;
-  void set_init_lock(oop value)      { klass_oop_store(&_init_lock, value); }
-  void fence_and_clear_init_lock();  // after fully_initialized
+  volatile oop init_lock() const     {return _per_class_lock; }
+  void set_per_class_lock(oop value) { klass_oop_store(&_per_class_lock, value); }
 
   // Offsets for memory management
   oop* adr_protection_domain() const { return (oop*)&this->_protection_domain;}
   oop* adr_signers() const           { return (oop*)&this->_signers;}
-  oop* adr_init_lock() const         { return (oop*)&this->_init_lock;}
+  oop* adr_per_class_lock() const    { return (oop*)&this->_per_class_lock;}
 
   // Static methods that are used to implement member methods where an exposed this pointer
   // is needed due to possible GCs
   static bool link_class_impl                           (instanceKlassHandle this_oop, bool throw_verifyerror, TRAPS);
   static bool verify_code                               (instanceKlassHandle this_oop, bool throw_verifyerror, TRAPS);