Skip to content

Commit b7f0b3f

Browse files
author
Harold Seigel
committed
8252173: Use handles instead of jobjects in modules.cpp
Reviewed-by: lfoltan, coleenp
1 parent a6e34b3 commit b7f0b3f

File tree

4 files changed

+69
-57
lines changed

4 files changed

+69
-57
lines changed

src/hotspot/share/classfile/modules.cpp

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,12 @@ static PackageEntryTable* get_package_entry_table(Handle h_loader) {
100100
return loader_cld->packages();
101101
}
102102

103-
static ModuleEntry* get_module_entry(jobject module, TRAPS) {
104-
oop m = JNIHandles::resolve_non_null(module);
105-
if (!java_lang_Module::is_instance(m)) {
103+
static ModuleEntry* get_module_entry(Handle module, TRAPS) {
104+
if (!java_lang_Module::is_instance(module())) {
106105
THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(),
107106
"module is not an instance of type java.lang.Module");
108107
}
109-
return java_lang_Module::module_entry(m);
108+
return java_lang_Module::module_entry(module());
110109
}
111110

112111

@@ -272,23 +271,22 @@ void throw_dup_pkg_exception(const char* module_name, PackageEntry* package, TRA
272271
}
273272
}
274273

275-
void Modules::define_module(jobject module, jboolean is_open, jstring version,
274+
void Modules::define_module(Handle module, jboolean is_open, jstring version,
276275
jstring location, jobjectArray packages, TRAPS) {
277276
check_cds_restrictions(CHECK);
278277
ResourceMark rm(THREAD);
279278

280-
if (module == NULL) {
279+
if (module.is_null()) {
281280
THROW_MSG(vmSymbols::java_lang_NullPointerException(), "Null module object");
282281
}
283282

284-
Handle module_handle(THREAD, JNIHandles::resolve_non_null(module));
285-
if (!java_lang_Module::is_instance(module_handle())) {
283+
if (!java_lang_Module::is_instance(module())) {
286284
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
287285
"module is not an instance of type java.lang.Module");
288286
}
289287

290288
int module_name_len;
291-
char* module_name = get_module_name(module_handle(), module_name_len, CHECK);
289+
char* module_name = get_module_name(module(), module_name_len, CHECK);
292290
if (module_name == NULL) {
293291
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
294292
"Module name cannot be null");
@@ -301,11 +299,11 @@ void Modules::define_module(jobject module, jboolean is_open, jstring version,
301299
// Special handling of java.base definition
302300
if (strcmp(module_name, JAVA_BASE_NAME) == 0) {
303301
assert(is_open == JNI_FALSE, "java.base module cannot be open");
304-
define_javabase_module(module_handle, version, location, packages_h, num_packages, CHECK);
302+
define_javabase_module(module, version, location, packages_h, num_packages, CHECK);
305303
return;
306304
}
307305

308-
oop loader = java_lang_Module::loader(module_handle());
306+
oop loader = java_lang_Module::loader(module());
309307
// Make sure loader is not the jdk.internal.reflect.DelegatingClassLoader.
310308
if (loader != java_lang_ClassLoader::non_reflection_class_loader(loader)) {
311309
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
@@ -402,7 +400,7 @@ void Modules::define_module(jobject module, jboolean is_open, jstring version,
402400
if (!dupl_modules && existing_pkg == NULL) {
403401
if (module_table->lookup_only(module_symbol) == NULL) {
404402
// Create the entry for this module in the class loader's module entry table.
405-
ModuleEntry* module_entry = module_table->locked_create_entry(module_handle,
403+
ModuleEntry* module_entry = module_table->locked_create_entry(module,
406404
(is_open == JNI_TRUE), module_symbol,
407405
version_symbol, location_symbol, loader_data);
408406
assert(module_entry != NULL, "module_entry creation failed");
@@ -419,7 +417,7 @@ void Modules::define_module(jobject module, jboolean is_open, jstring version,
419417
}
420418

421419
// Store pointer to ModuleEntry record in java.lang.Module object.
422-
java_lang_Module::set_module_entry(module_handle(), module_entry);
420+
java_lang_Module::set_module_entry(module(), module_entry);
423421
} else {
424422
dupl_modules = true;
425423
}
@@ -476,7 +474,7 @@ void Modules::define_module(jobject module, jboolean is_open, jstring version,
476474
}
477475

478476
#if INCLUDE_CDS_JAVA_HEAP
479-
void Modules::define_archived_modules(jobject platform_loader, jobject system_loader, TRAPS) {
477+
void Modules::define_archived_modules(Handle h_platform_loader, Handle h_system_loader, TRAPS) {
480478
assert(UseSharedSpaces && MetaspaceShared::use_full_module_graph(), "must be");
481479

482480
// We don't want the classes used by the archived full module graph to be redefined by JVMTI.
@@ -490,19 +488,17 @@ void Modules::define_archived_modules(jobject platform_loader, jobject system_lo
490488
// Patch any previously loaded class's module field with java.base's java.lang.Module.
491489
ModuleEntryTable::patch_javabase_entries(java_base_module);
492490

493-
if (platform_loader == NULL) {
491+
if (h_platform_loader.is_null()) {
494492
THROW_MSG(vmSymbols::java_lang_NullPointerException(), "Null platform loader object");
495493
}
496494

497-
if (system_loader == NULL) {
495+
if (h_system_loader.is_null()) {
498496
THROW_MSG(vmSymbols::java_lang_NullPointerException(), "Null system loader object");
499497
}
500498

501-
Handle h_platform_loader(THREAD, JNIHandles::resolve_non_null(platform_loader));
502499
ClassLoaderData* platform_loader_data = SystemDictionary::register_loader(h_platform_loader);
503500
ClassLoaderDataShared::restore_java_platform_loader_from_archive(platform_loader_data);
504501

505-
Handle h_system_loader(THREAD, JNIHandles::resolve_non_null(system_loader));
506502
ClassLoaderData* system_loader_data = SystemDictionary::register_loader(h_system_loader);
507503
ClassLoaderDataShared::restore_java_system_loader_from_archive(system_loader_data);
508504
}
@@ -515,27 +511,26 @@ void Modules::check_cds_restrictions(TRAPS) {
515511
}
516512
#endif // INCLUDE_CDS_JAVA_HEAP
517513

518-
void Modules::set_bootloader_unnamed_module(jobject module, TRAPS) {
514+
void Modules::set_bootloader_unnamed_module(Handle module, TRAPS) {
519515
ResourceMark rm(THREAD);
520516

521-
if (module == NULL) {
517+
if (module.is_null()) {
522518
THROW_MSG(vmSymbols::java_lang_NullPointerException(), "Null module object");
523519
}
524-
Handle module_handle(THREAD, JNIHandles::resolve(module));
525-
if (!java_lang_Module::is_instance(module_handle())) {
520+
if (!java_lang_Module::is_instance(module())) {
526521
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
527522
"module is not an instance of type java.lang.Module");
528523
}
529524

530525
// Ensure that this is an unnamed module
531-
oop name = java_lang_Module::name(module_handle());
526+
oop name = java_lang_Module::name(module());
532527
if (name != NULL) {
533528
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
534529
"boot loader's unnamed module's java.lang.Module has a name");
535530
}
536531

537532
// Validate java_base's loader is the boot loader.
538-
oop loader = java_lang_Module::loader(module_handle());
533+
oop loader = java_lang_Module::loader(module());
539534
if (loader != NULL) {
540535
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
541536
"Class loader must be the boot class loader");
@@ -547,19 +542,19 @@ void Modules::set_bootloader_unnamed_module(jobject module, TRAPS) {
547542
ClassLoaderData* boot_loader_data = ClassLoaderData::the_null_class_loader_data();
548543
ModuleEntry* unnamed_module = boot_loader_data->unnamed_module();
549544
assert(unnamed_module != NULL, "boot loader's unnamed ModuleEntry not defined");
550-
unnamed_module->set_module(boot_loader_data->add_handle(module_handle));
545+
unnamed_module->set_module(boot_loader_data->add_handle(module));
551546
// Store pointer to the ModuleEntry in the unnamed module's java.lang.Module object.
552-
java_lang_Module::set_module_entry(module_handle(), unnamed_module);
547+
java_lang_Module::set_module_entry(module(), unnamed_module);
553548
}
554549

555-
void Modules::add_module_exports(jobject from_module, jstring package_name, jobject to_module, TRAPS) {
550+
void Modules::add_module_exports(Handle from_module, jstring package_name, Handle to_module, TRAPS) {
556551
check_cds_restrictions(CHECK);
557552

558553
if (package_name == NULL) {
559554
THROW_MSG(vmSymbols::java_lang_NullPointerException(),
560555
"package is null");
561556
}
562-
if (from_module == NULL) {
557+
if (from_module.is_null()) {
563558
THROW_MSG(vmSymbols::java_lang_NullPointerException(),
564559
"from_module is null");
565560
}
@@ -573,7 +568,7 @@ void Modules::add_module_exports(jobject from_module, jstring package_name, jobj
573568
if (!from_module_entry->is_named() || from_module_entry->is_open()) return;
574569

575570
ModuleEntry* to_module_entry;
576-
if (to_module == NULL) {
571+
if (to_module.is_null()) {
577572
to_module_entry = NULL; // It's an unqualified export.
578573
} else {
579574
to_module_entry = get_module_entry(to_module, CHECK);
@@ -619,19 +614,19 @@ void Modules::add_module_exports(jobject from_module, jstring package_name, jobj
619614
}
620615

621616

622-
void Modules::add_module_exports_qualified(jobject from_module, jstring package,
623-
jobject to_module, TRAPS) {
617+
void Modules::add_module_exports_qualified(Handle from_module, jstring package,
618+
Handle to_module, TRAPS) {
624619
check_cds_restrictions(CHECK);
625-
if (to_module == NULL) {
620+
if (to_module.is_null()) {
626621
THROW_MSG(vmSymbols::java_lang_NullPointerException(),
627622
"to_module is null");
628623
}
629624
add_module_exports(from_module, package, to_module, CHECK);
630625
}
631626

632-
void Modules::add_reads_module(jobject from_module, jobject to_module, TRAPS) {
627+
void Modules::add_reads_module(Handle from_module, Handle to_module, TRAPS) {
633628
check_cds_restrictions(CHECK);
634-
if (from_module == NULL) {
629+
if (from_module.is_null()) {
635630
THROW_MSG(vmSymbols::java_lang_NullPointerException(),
636631
"from_module is null");
637632
}
@@ -643,7 +638,7 @@ void Modules::add_reads_module(jobject from_module, jobject to_module, TRAPS) {
643638
}
644639

645640
ModuleEntry* to_module_entry;
646-
if (to_module != NULL) {
641+
if (!to_module.is_null()) {
647642
to_module_entry = get_module_entry(to_module, CHECK);
648643
if (to_module_entry == NULL) {
649644
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
@@ -735,9 +730,9 @@ jobject Modules::get_named_module(Handle h_loader, const char* package_name, TRA
735730
}
736731

737732
// Export package in module to all unnamed modules.
738-
void Modules::add_module_exports_to_all_unnamed(jobject module, jstring package_name, TRAPS) {
733+
void Modules::add_module_exports_to_all_unnamed(Handle module, jstring package_name, TRAPS) {
739734
check_cds_restrictions(CHECK);
740-
if (module == NULL) {
735+
if (module.is_null()) {
741736
THROW_MSG(vmSymbols::java_lang_NullPointerException(),
742737
"module is null");
743738
}

src/hotspot/share/classfile/modules.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -50,10 +50,10 @@ class Modules : AllStatic {
5050
// * A package already exists in another module for this class loader
5151
// * Module is an unnamed module
5252
// NullPointerExceptions are thrown if module is null.
53-
static void define_module(jobject module, jboolean is_open, jstring version,
53+
static void define_module(Handle module, jboolean is_open, jstring version,
5454
jstring location, jobjectArray packages, TRAPS);
5555

56-
static void define_archived_modules(jobject platform_loader, jobject system_loader,
56+
static void define_archived_modules(Handle h_platform_loader, Handle h_system_loader,
5757
TRAPS) NOT_CDS_JAVA_HEAP_RETURN;
5858

5959
// Provides the java.lang.Module for the unnamed module defined
@@ -64,7 +64,7 @@ class Modules : AllStatic {
6464
// * Module is not a subclass of java.lang.Module
6565
// * Module's class loader is not the boot loader
6666
// NullPointerExceptions are thrown if module is null.
67-
static void set_bootloader_unnamed_module(jobject module, TRAPS);
67+
static void set_bootloader_unnamed_module(Handle module, TRAPS);
6868

6969
// This either does a qualified export of package in module from_module to module
7070
// to_module or, if to_module is null, does an unqualified export of package.
@@ -76,7 +76,7 @@ class Modules : AllStatic {
7676
// * Package is not syntactically correct
7777
// * Package is not defined for from_module's class loader
7878
// * Package is not in module from_module.
79-
static void add_module_exports(jobject from_module, jstring package, jobject to_module, TRAPS);
79+
static void add_module_exports(Handle from_module, jstring package, Handle to_module, TRAPS);
8080

8181
// This does a qualified export of package in module from_module to module
8282
// to_module. Any "." in the package name will be converted to "/"
@@ -87,15 +87,15 @@ class Modules : AllStatic {
8787
// * Package is not syntactically correct
8888
// * Package is not defined for from_module's class loader
8989
// * Package is not in module from_module.
90-
static void add_module_exports_qualified(jobject from_module, jstring package, jobject to_module, TRAPS);
90+
static void add_module_exports_qualified(Handle from_module, jstring package, Handle to_module, TRAPS);
9191

9292
// add_reads_module adds module to_module to the list of modules that from_module
9393
// can read. If from_module is the same as to_module then this is a no-op.
9494
// If to_module is null then from_module is marked as a loose module (meaning that
9595
// from_module can read all current and future unnamed modules).
9696
// An IllegalArgumentException is thrown if from_module is null or either (non-null)
9797
// module does not exist.
98-
static void add_reads_module(jobject from_module, jobject to_module, TRAPS);
98+
static void add_reads_module(Handle from_module, Handle to_module, TRAPS);
9999

100100
// Return the java.lang.Module object for this class object.
101101
static jobject get_module(jclass clazz, TRAPS);
@@ -112,7 +112,7 @@ class Modules : AllStatic {
112112
// If either module or package is null then NullPointerException is thrown.
113113
// If module or package is bad, or module is unnamed, or package is not in
114114
// module then IllegalArgumentException is thrown.
115-
static void add_module_exports_to_all_unnamed(jobject module, jstring package, TRAPS);
115+
static void add_module_exports_to_all_unnamed(Handle module, jstring package, TRAPS);
116116

117117
// Return TRUE iff package is defined by loader
118118
static bool is_package_defined(Symbol* package_name, Handle h_loader, TRAPS);

src/hotspot/share/prims/jvm.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,31 +1086,41 @@ JVM_END
10861086

10871087
JVM_ENTRY(void, JVM_DefineModule(JNIEnv *env, jobject module, jboolean is_open, jstring version,
10881088
jstring location, jobjectArray packages))
1089-
Modules::define_module(module, is_open, version, location, packages, CHECK);
1089+
Handle h_module (THREAD, JNIHandles::resolve(module));
1090+
Modules::define_module(h_module, is_open, version, location, packages, CHECK);
10901091
JVM_END
10911092

10921093
JVM_ENTRY(void, JVM_SetBootLoaderUnnamedModule(JNIEnv *env, jobject module))
1093-
Modules::set_bootloader_unnamed_module(module, CHECK);
1094+
Handle h_module (THREAD, JNIHandles::resolve(module));
1095+
Modules::set_bootloader_unnamed_module(h_module, CHECK);
10941096
JVM_END
10951097

10961098
JVM_ENTRY(void, JVM_AddModuleExports(JNIEnv *env, jobject from_module, jstring package, jobject to_module))
1097-
Modules::add_module_exports_qualified(from_module, package, to_module, CHECK);
1099+
Handle h_from_module (THREAD, JNIHandles::resolve(from_module));
1100+
Handle h_to_module (THREAD, JNIHandles::resolve(to_module));
1101+
Modules::add_module_exports_qualified(h_from_module, package, h_to_module, CHECK);
10981102
JVM_END
10991103

11001104
JVM_ENTRY(void, JVM_AddModuleExportsToAllUnnamed(JNIEnv *env, jobject from_module, jstring package))
1101-
Modules::add_module_exports_to_all_unnamed(from_module, package, CHECK);
1105+
Handle h_from_module (THREAD, JNIHandles::resolve(from_module));
1106+
Modules::add_module_exports_to_all_unnamed(h_from_module, package, CHECK);
11021107
JVM_END
11031108

11041109
JVM_ENTRY(void, JVM_AddModuleExportsToAll(JNIEnv *env, jobject from_module, jstring package))
1105-
Modules::add_module_exports(from_module, package, NULL, CHECK);
1110+
Handle h_from_module (THREAD, JNIHandles::resolve(from_module));
1111+
Modules::add_module_exports(h_from_module, package, Handle(), CHECK);
11061112
JVM_END
11071113

11081114
JVM_ENTRY (void, JVM_AddReadsModule(JNIEnv *env, jobject from_module, jobject source_module))
1109-
Modules::add_reads_module(from_module, source_module, CHECK);
1115+
Handle h_from_module (THREAD, JNIHandles::resolve(from_module));
1116+
Handle h_source_module (THREAD, JNIHandles::resolve(source_module));
1117+
Modules::add_reads_module(h_from_module, h_source_module, CHECK);
11101118
JVM_END
11111119

11121120
JVM_ENTRY(void, JVM_DefineArchivedModules(JNIEnv *env, jobject platform_loader, jobject system_loader))
1113-
Modules::define_archived_modules(platform_loader, system_loader, CHECK);
1121+
Handle h_platform_loader (THREAD, JNIHandles::resolve(platform_loader));
1122+
Handle h_system_loader (THREAD, JNIHandles::resolve(system_loader));
1123+
Modules::define_archived_modules(h_platform_loader, h_system_loader, CHECK);
11141124
JVM_END
11151125

11161126
// Reflection support //////////////////////////////////////////////////////////////////////////////

src/hotspot/share/prims/whitebox.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,23 +1687,30 @@ WB_END
16871687

16881688
WB_ENTRY(void, WB_DefineModule(JNIEnv* env, jobject o, jobject module, jboolean is_open,
16891689
jstring version, jstring location, jobjectArray packages))
1690-
Modules::define_module(module, is_open, version, location, packages, CHECK);
1690+
Handle h_module (THREAD, JNIHandles::resolve(module));
1691+
Modules::define_module(h_module, is_open, version, location, packages, CHECK);
16911692
WB_END
16921693

16931694
WB_ENTRY(void, WB_AddModuleExports(JNIEnv* env, jobject o, jobject from_module, jstring package, jobject to_module))
1694-
Modules::add_module_exports_qualified(from_module, package, to_module, CHECK);
1695+
Handle h_from_module (THREAD, JNIHandles::resolve(from_module));
1696+
Handle h_to_module (THREAD, JNIHandles::resolve(to_module));
1697+
Modules::add_module_exports_qualified(h_from_module, package, h_to_module, CHECK);
16951698
WB_END
16961699

16971700
WB_ENTRY(void, WB_AddModuleExportsToAllUnnamed(JNIEnv* env, jobject o, jclass module, jstring package))
1698-
Modules::add_module_exports_to_all_unnamed(module, package, CHECK);
1701+
Handle h_module (THREAD, JNIHandles::resolve(module));
1702+
Modules::add_module_exports_to_all_unnamed(h_module, package, CHECK);
16991703
WB_END
17001704

17011705
WB_ENTRY(void, WB_AddModuleExportsToAll(JNIEnv* env, jobject o, jclass module, jstring package))
1702-
Modules::add_module_exports(module, package, NULL, CHECK);
1706+
Handle h_module (THREAD, JNIHandles::resolve(module));
1707+
Modules::add_module_exports(h_module, package, Handle(), CHECK);
17031708
WB_END
17041709

17051710
WB_ENTRY(void, WB_AddReadsModule(JNIEnv* env, jobject o, jobject from_module, jobject source_module))
1706-
Modules::add_reads_module(from_module, source_module, CHECK);
1711+
Handle h_from_module (THREAD, JNIHandles::resolve(from_module));
1712+
Handle h_source_module (THREAD, JNIHandles::resolve(source_module));
1713+
Modules::add_reads_module(h_from_module, h_source_module, CHECK);
17071714
WB_END
17081715

17091716
WB_ENTRY(jlong, WB_IncMetaspaceCapacityUntilGC(JNIEnv* env, jobject wb, jlong inc))

0 commit comments

Comments
 (0)