mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-25 13:54:38 +02:00
8042727: nsk/jdb/unwatch/unwatch001 crash in InstanceKlass::methods_do(void (*)(Method*))
Only walk methods in instanceklass if the class is loaded Reviewed-by: dholmes, fparain
This commit is contained in:
parent
7f721c111b
commit
ead7a2760b
5 changed files with 17 additions and 2 deletions
|
@ -274,6 +274,8 @@ void ClassLoaderData::add_class(Klass* k) {
|
||||||
MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
|
MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
|
||||||
Klass* old_value = _klasses;
|
Klass* old_value = _klasses;
|
||||||
k->set_next_link(old_value);
|
k->set_next_link(old_value);
|
||||||
|
// Make sure linked class is stable, since the class list is walked without a lock
|
||||||
|
OrderAccess::storestore();
|
||||||
// link the new item into the list
|
// link the new item into the list
|
||||||
_klasses = k;
|
_klasses = k;
|
||||||
|
|
||||||
|
|
|
@ -307,6 +307,9 @@ bool CompilerOracle::should_print(methodHandle method) {
|
||||||
return (check_predicate(PrintCommand, method));
|
return (check_predicate(PrintCommand, method));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CompilerOracle::should_print_methods() {
|
||||||
|
return lists[PrintCommand] != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
bool CompilerOracle::should_log(methodHandle method) {
|
bool CompilerOracle::should_log(methodHandle method) {
|
||||||
if (!LogCompilation) return false;
|
if (!LogCompilation) return false;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -73,6 +73,9 @@ class CompilerOracle : AllStatic {
|
||||||
// For updating the oracle file
|
// For updating the oracle file
|
||||||
static void append_comment_to_file(const char* message);
|
static void append_comment_to_file(const char* message);
|
||||||
static void append_exclude_to_file(methodHandle method);
|
static void append_exclude_to_file(methodHandle method);
|
||||||
|
|
||||||
|
// Tells whether there are any methods to print for print_method_statistics()
|
||||||
|
static bool should_print_methods();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SHARE_VM_COMPILER_COMPILERORACLE_HPP
|
#endif // SHARE_VM_COMPILER_COMPILERORACLE_HPP
|
||||||
|
|
|
@ -1273,6 +1273,12 @@ bool InstanceKlass::find_field_from_offset(int offset, bool is_static, fieldDesc
|
||||||
|
|
||||||
|
|
||||||
void InstanceKlass::methods_do(void f(Method* method)) {
|
void InstanceKlass::methods_do(void f(Method* method)) {
|
||||||
|
// Methods aren't stable until they are loaded. This can be read outside
|
||||||
|
// a lock through the ClassLoaderData for profiling
|
||||||
|
if (!is_loaded()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int len = methods()->length();
|
int len = methods()->length();
|
||||||
for (int index = 0; index < len; index++) {
|
for (int index = 0; index < len; index++) {
|
||||||
Method* m = methods()->at(index);
|
Method* m = methods()->at(index);
|
||||||
|
|
|
@ -120,7 +120,8 @@ void collect_profiled_methods(Method* m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_method_profiling_data() {
|
void print_method_profiling_data() {
|
||||||
if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData)) {
|
if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData) &&
|
||||||
|
(PrintMethodData || CompilerOracle::should_print_methods())) {
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
HandleMark hm;
|
HandleMark hm;
|
||||||
collected_profiled_methods = new GrowableArray<Method*>(1024);
|
collected_profiled_methods = new GrowableArray<Method*>(1024);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue