12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #ifndef SHARE_CLASSFILE_CLASSLOADER_INLINE_HPP 26 #define SHARE_CLASSFILE_CLASSLOADER_INLINE_HPP 27 28 #include "classfile/classLoader.hpp" 29 #include "runtime/orderAccess.hpp" 30 31 // Next entry in class path 32 inline ClassPathEntry* ClassPathEntry::next() const { return OrderAccess::load_acquire(&_next); } 33 34 inline void ClassPathEntry::set_next(ClassPathEntry* next) { 35 // may have unlocked readers, so ensure visibility. 36 OrderAccess::release_store(&_next, next); 37 } 38 39 inline ClassPathEntry* ClassLoader::classpath_entry(int n) { 40 assert(n >= 0, "sanity"); 41 if (n == 0) { 42 assert(has_jrt_entry(), "No class path entry at 0 for exploded module builds"); 43 return ClassLoader::_jrt_entry; 44 } else { 45 // The java runtime image is always the first entry 46 // in the FileMapInfo::_classpath_entry_table. Even though 47 // the _jrt_entry is not included in the _first_append_entry 48 // linked list, it must be accounted for when comparing the 49 // class path vs. the shared archive class path. 50 ClassPathEntry* e = ClassLoader::_first_append_entry; 51 while (--n >= 1) { 52 assert(e != NULL, "Not that many classpath entries."); 53 e = e->next(); 54 } 55 return e; 56 } | 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #ifndef SHARE_CLASSFILE_CLASSLOADER_INLINE_HPP 26 #define SHARE_CLASSFILE_CLASSLOADER_INLINE_HPP 27 28 #include "classfile/classLoader.hpp" 29 #include "runtime/orderAccess.hpp" 30 31 // Next entry in class path 32 inline ClassPathEntry* ClassPathEntry::next() const { return Atomic::load_acquire(&_next); } 33 34 inline void ClassPathEntry::set_next(ClassPathEntry* next) { 35 // may have unlocked readers, so ensure visibility. 36 Atomic::release_store(&_next, next); 37 } 38 39 inline ClassPathEntry* ClassLoader::classpath_entry(int n) { 40 assert(n >= 0, "sanity"); 41 if (n == 0) { 42 assert(has_jrt_entry(), "No class path entry at 0 for exploded module builds"); 43 return ClassLoader::_jrt_entry; 44 } else { 45 // The java runtime image is always the first entry 46 // in the FileMapInfo::_classpath_entry_table. Even though 47 // the _jrt_entry is not included in the _first_append_entry 48 // linked list, it must be accounted for when comparing the 49 // class path vs. the shared archive class path. 50 ClassPathEntry* e = ClassLoader::_first_append_entry; 51 while (--n >= 1) { 52 assert(e != NULL, "Not that many classpath entries."); 53 e = e->next(); 54 } 55 return e; 56 } |