changeset 11279:3d94e9193472

8157097: OptionsValidation/TestOptionsWithRanges.java crashes at CompactHashtableWriter::add during StringTable::copy_shared_string Reviewed-by: dholmes, jiangli
author rehn
date Mon, 23 May 2016 09:57:17 +0200
parents 31a43b7db1cf
children a85af5663523 18194796107b 9dd574967e9b
files src/share/vm/classfile/compactHashtable.cpp src/share/vm/classfile/stringTable.cpp
diffstat 2 files changed, 3 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/classfile/compactHashtable.cpp	Mon May 23 08:02:04 2016 +0200
+++ b/src/share/vm/classfile/compactHashtable.cpp	Mon May 23 09:57:17 2016 +0200
@@ -38,6 +38,7 @@
 CompactHashtableWriter::CompactHashtableWriter(int num_buckets,
                                                CompactHashtableStats* stats) {
   assert(DumpSharedSpaces, "dump-time only");
+  assert(num_buckets > 0, "no buckets");
   _num_buckets = num_buckets;
   _num_entries = 0;
   _buckets = NEW_C_HEAP_ARRAY(GrowableArray<Entry>*, _num_buckets, mtSymbol);
--- a/src/share/vm/classfile/stringTable.cpp	Mon May 23 08:02:04 2016 +0200
+++ b/src/share/vm/classfile/stringTable.cpp	Mon May 23 09:57:17 2016 +0200
@@ -740,7 +740,8 @@
     } else {
       int num_buckets = the_table()->number_of_entries() /
                              SharedSymbolTableBucketSize;
-      CompactStringTableWriter writer(num_buckets,
+      // calculation of num_buckets can result in zero buckets, we need at least one
+      CompactStringTableWriter writer(num_buckets > 1 ? num_buckets : 1,
                                       &MetaspaceShared::stats()->string);
 
       // Copy the interned strings into the "string space" within the java heap