8227032: MetaspaceUtils::print_report crashes when called before initialization

Reviewed-by: tschatzl, goetz
This commit is contained in:
Thomas Stuefe 2019-07-01 16:28:17 +02:00
parent 9e02985246
commit ba3ba19536
2 changed files with 19 additions and 0 deletions

View File

@ -584,6 +584,11 @@ static void print_basic_switches(outputStream* out, size_t scale) {
// unlike print_report() is guaranteed not to lock or to walk the CLDG.
void MetaspaceUtils::print_basic_report(outputStream* out, size_t scale) {
if (!Metaspace::initialized()) {
out->print_cr("Metaspace not yet initialized.");
return;
}
out->cr();
out->print_cr("Usage:");
@ -672,6 +677,11 @@ void MetaspaceUtils::print_basic_report(outputStream* out, size_t scale) {
void MetaspaceUtils::print_report(outputStream* out, size_t scale, int flags) {
if (!Metaspace::initialized()) {
out->print_cr("Metaspace not yet initialized.");
return;
}
const bool print_loaders = (flags & rf_show_loaders) > 0;
const bool print_classes = (flags & rf_show_classes) > 0;
const bool print_by_chunktype = (flags & rf_break_down_by_chunktype) > 0;
@ -959,6 +969,8 @@ VirtualSpaceList* Metaspace::_class_space_list = NULL;
ChunkManager* Metaspace::_chunk_manager_metadata = NULL;
ChunkManager* Metaspace::_chunk_manager_class = NULL;
bool Metaspace::_initialized = false;
#define VIRTUALSPACEMULTIPLIER 2
#ifdef _LP64
@ -1285,6 +1297,9 @@ void Metaspace::global_initialize() {
}
_tracer = new MetaspaceTracer();
_initialized = true;
}
void Metaspace::post_initialize() {

View File

@ -140,6 +140,8 @@ class Metaspace : public AllStatic {
static const MetaspaceTracer* _tracer;
static bool _initialized;
public:
static metaspace::VirtualSpaceList* space_list() { return _space_list; }
static metaspace::VirtualSpaceList* class_space_list() { return _class_space_list; }
@ -225,6 +227,8 @@ class Metaspace : public AllStatic {
return mdType == ClassType && using_class_space();
}
static bool initialized() { return _initialized; }
};
// Manages the metaspace portion belonging to a class loader