< prev index next >

src/share/vm/classfile/moduleEntry.hpp

Print this page

        

@@ -28,10 +28,11 @@
 #include "classfile/classLoaderData.hpp"
 #include "classfile/vmSymbols.hpp"
 #include "oops/symbol.hpp"
 #include "prims/jni.h"
 #include "runtime/mutexLocker.hpp"
+#include "runtime/orderAccess.hpp"
 #include "trace/traceMacros.hpp"
 #include "utilities/growableArray.hpp"
 #include "utilities/hashtable.hpp"
 #include "utilities/ostream.hpp"
 

@@ -80,11 +81,14 @@
 
   Symbol*          name() const          { return literal(); }
   void             set_name(Symbol* n)   { set_literal(n); }
 
   jobject          module() const        { return _module; }
+  jobject          module_load_acquire() const         { return (jobject)OrderAccess::load_ptr_acquire(&_module); }
   void             set_module(jobject j) { _module = j; }
+  void             set_module_release_store(jobject j) { OrderAccess::release_store_ptr(&_module, j); }
+    
 
   // The shared ProtectionDomain reference is set once the VM loads a shared class
   // originated from the current Module. The referenced ProtectionDomain object is
   // created by the ClassLoader when loading a class (shared or non-shared) from the
   // Module for the first time. This ProtectionDomain object is used for all

@@ -218,14 +222,16 @@
   // Special handling for unnamed module, one per class loader's ModuleEntryTable
   void create_unnamed_module(ClassLoaderData* loader_data);
   ModuleEntry* unnamed_module()                           { return _unnamed_module; }
 
   // Special handling for java.base
-  static ModuleEntry* javabase_module()                   { return _javabase_module; }
-  static void set_javabase_module(ModuleEntry* java_base) { _javabase_module = java_base; }
-  static bool javabase_defined()                          { return ((_javabase_module != NULL) &&
-                                                                    (_javabase_module->module() != NULL)); }
+  static ModuleEntry* javabase_moduleEntry()                   { return _javabase_module; }
+  static void set_javabase_moduleEntry(ModuleEntry* java_base) { _javabase_module = java_base; }
+  static bool javabase_defined() {
+    ModuleEntry* jb = javabase_moduleEntry();
+    return ((jb != NULL) && (jb->module_load_acquire() != NULL));
+  }
   static void finalize_javabase(Handle module_handle, Symbol* version, Symbol* location);
   static void patch_javabase_entries(Handle module_handle);
 
   void print(outputStream* st = tty);
   void verify();
< prev index next >