8245264: Test runtime/cds/appcds/SignedJar.java fails

Concurrent work of symbol table caused _shared_table not walkable in dumping archive which led symbols not sorted in shared archive. Change to use do_safepoint_scan of _local_table to collect symbols.

Reviewed-by: iklam, ccheung
This commit is contained in:
Yumin Qi 2020-05-27 16:04:28 -07:00
parent 7e85b2c787
commit e6855f20b0
4 changed files with 5 additions and 5 deletions
src/hotspot/share
test/hotspot/jtreg

@ -269,6 +269,7 @@ public:
// Call function for all symbols in the symbol table.
void SymbolTable::symbols_do(SymbolClosure *cl) {
assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint");
// all symbols from shared table
SharedSymbolIterator iter(cl);
_shared_table.iterate(&iter);
@ -276,9 +277,7 @@ void SymbolTable::symbols_do(SymbolClosure *cl) {
// all symbols from the dynamic table
SymbolsDo sd(cl);
if (!_local_table->try_scan(Thread::current(), sd)) {
log_info(symboltable)("symbols_do unavailable at this moment");
}
_local_table->do_safepoint_scan(sd);
}
class MetaspacePointersDo : StackObj {

@ -264,6 +264,7 @@ public:
// When you do:
// void MyType::metaspace_pointers_do(MetaspaceClosure* it) {
// it->push(_my_field)
// }
//
// C++ will try to match the "most specific" template function. This one will
// will be matched if possible (if mpp is an Array<> of any pointer type).

@ -1219,6 +1219,8 @@ class SortedSymbolClosure: public SymbolClosure {
if (a[0] < b[0]) {
return -1;
} else if (a[0] == b[0]) {
ResourceMark rm;
log_warning(cds)("Duplicated symbol %s unexpected", (*a)->as_C_string());
return 0;
} else {
return 1;

@ -93,8 +93,6 @@ gc/metaspace/CompressedClassSpaceSizeInJmapHeap.java 8241293 macosx-x64
runtime/jni/terminatedThread/TestTerminatedThread.java 8219652 aix-ppc64
runtime/ReservedStack/ReservedStackTest.java 8231031 generic-all
runtime/cds/appcds/SignedJar.java 8245264 generic-all
#############################################################################
# :hotspot_serviceability