mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8197901: Crash during GC when logging level is debug
Reviewed-by: dholmes, coleenp
This commit is contained in:
parent
03c754baa0
commit
2471caab08
3 changed files with 20 additions and 25 deletions
|
@ -577,21 +577,15 @@ const char* Klass::external_name() const {
|
||||||
if (is_instance_klass()) {
|
if (is_instance_klass()) {
|
||||||
const InstanceKlass* ik = static_cast<const InstanceKlass*>(this);
|
const InstanceKlass* ik = static_cast<const InstanceKlass*>(this);
|
||||||
if (ik->is_anonymous()) {
|
if (ik->is_anonymous()) {
|
||||||
intptr_t hash = 0;
|
char addr_buf[20];
|
||||||
if (ik->java_mirror() != NULL) {
|
jio_snprintf(addr_buf, 20, "/" INTPTR_FORMAT, p2i(ik));
|
||||||
// java_mirror might not be created yet, return 0 as hash.
|
size_t addr_len = strlen(addr_buf);
|
||||||
hash = ik->java_mirror()->identity_hash();
|
size_t name_len = name()->utf8_length();
|
||||||
}
|
char* result = NEW_RESOURCE_ARRAY(char, name_len + addr_len + 1);
|
||||||
char hash_buf[40];
|
name()->as_klass_external_name(result, (int) name_len + 1);
|
||||||
sprintf(hash_buf, "/" UINTX_FORMAT, (uintx)hash);
|
assert(strlen(result) == name_len, "");
|
||||||
size_t hash_len = strlen(hash_buf);
|
strcpy(result + name_len, addr_buf);
|
||||||
|
assert(strlen(result) == name_len + addr_len, "");
|
||||||
size_t result_len = name()->utf8_length();
|
|
||||||
char* result = NEW_RESOURCE_ARRAY(char, result_len + hash_len + 1);
|
|
||||||
name()->as_klass_external_name(result, (int) result_len + 1);
|
|
||||||
assert(strlen(result) == result_len, "");
|
|
||||||
strcpy(result + result_len, hash_buf);
|
|
||||||
assert(strlen(result) == result_len + hash_len, "");
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2014, 2018, 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
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 8055008
|
* @bug 8055008 8197901
|
||||||
* @summary Redefine EMCP and non-EMCP methods that are running in an infinite loop
|
* @summary Redefine EMCP and non-EMCP methods that are running in an infinite loop
|
||||||
* @library /test/lib
|
* @library /test/lib
|
||||||
* @modules java.base/jdk.internal.misc
|
* @modules java.base/jdk.internal.misc
|
||||||
|
@ -31,8 +31,9 @@
|
||||||
* java.instrument
|
* java.instrument
|
||||||
* jdk.jartool/sun.tools.jar
|
* jdk.jartool/sun.tools.jar
|
||||||
* @run main RedefineClassHelper
|
* @run main RedefineClassHelper
|
||||||
* @run main/othervm -javaagent:redefineagent.jar -Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace RedefineRunningMethods
|
* @run main/othervm -javaagent:redefineagent.jar -Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace,all=trace:file=all.log RedefineRunningMethods
|
||||||
*/
|
*/
|
||||||
|
// Test is executed with full trace logging redirected to a file to ensure there is no crash during logging anonymous classes - see JDK-8197901
|
||||||
public class RedefineRunningMethods {
|
public class RedefineRunningMethods {
|
||||||
|
|
||||||
public static String newB =
|
public static String newB =
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2015, 2018, 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
|
||||||
|
@ -36,7 +36,7 @@ import static java.lang.StackWalker.Option.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
* @bug 8140450
|
* @bug 8140450 8197901
|
||||||
* @summary Verify stack trace information obtained with respect to StackWalker
|
* @summary Verify stack trace information obtained with respect to StackWalker
|
||||||
* options, when the stack contains lambdas, method handle invoke
|
* options, when the stack contains lambdas, method handle invoke
|
||||||
* virtual calls, and reflection.
|
* virtual calls, and reflection.
|
||||||
|
@ -131,10 +131,10 @@ public class VerifyStackTrace {
|
||||||
// test output in here (don't forget the final \n):
|
// test output in here (don't forget the final \n):
|
||||||
private final String expected =
|
private final String expected =
|
||||||
"1: VerifyStackTrace.lambda$test$1(VerifyStackTrace.java:213)\n" +
|
"1: VerifyStackTrace.lambda$test$1(VerifyStackTrace.java:213)\n" +
|
||||||
"2: VerifyStackTrace$$Lambda$1/662441761.run(Unknown Source)\n" +
|
"2: VerifyStackTrace$$Lambda$1/0x00000007c0089430.run(Unknown Source)\n" +
|
||||||
"3: VerifyStackTrace$Handle.execute(VerifyStackTrace.java:149)\n" +
|
"3: VerifyStackTrace$Handle.execute(VerifyStackTrace.java:149)\n" +
|
||||||
"4: java.base/java.lang.invoke.LambdaForm$DMH/2008017533.invokeVirtual_LL_V(LambdaForm$DMH)\n" +
|
"4: java.base/java.lang.invoke.LambdaForm$DMH/0x00000007c008a830.invokeVirtual_LL_V(LambdaForm$DMH)\n" +
|
||||||
"5: java.base/java.lang.invoke.LambdaForm$MH/1395089624.invoke_MT(LambdaForm$MH)\n" +
|
"5: java.base/java.lang.invoke.LambdaForm$MH/0x00000007c008a830.invoke_MT(LambdaForm$MH)\n" +
|
||||||
"6: VerifyStackTrace$Handle.run(VerifyStackTrace.java:162)\n" +
|
"6: VerifyStackTrace$Handle.run(VerifyStackTrace.java:162)\n" +
|
||||||
"7: VerifyStackTrace.invoke(VerifyStackTrace.java:192)\n" +
|
"7: VerifyStackTrace.invoke(VerifyStackTrace.java:192)\n" +
|
||||||
"8: java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n" +
|
"8: java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n" +
|
||||||
|
@ -201,8 +201,8 @@ public class VerifyStackTrace {
|
||||||
// out before comparing. We also erase the hash-like names of
|
// out before comparing. We also erase the hash-like names of
|
||||||
// synthetic frames introduced by lambdas & method handles
|
// synthetic frames introduced by lambdas & method handles
|
||||||
return produced.replaceAll(":[1-9][0-9]*\\)", ":00)")
|
return produced.replaceAll(":[1-9][0-9]*\\)", ":00)")
|
||||||
.replaceAll("/[0-9]+\\.run", "/xxxxxxxx.run")
|
.replaceAll("/0x[0-9a-f]+\\.run", "/xxxxxxxx.run")
|
||||||
.replaceAll("/[0-9]+\\.invoke", "/xxxxxxxx.invoke")
|
.replaceAll("/0x[0-9a-f]+\\.invoke", "/xxxxxxxx.invoke")
|
||||||
// LFs may or may not be pre-generated, making frames differ
|
// LFs may or may not be pre-generated, making frames differ
|
||||||
.replaceAll("DirectMethodHandle\\$Holder", "LambdaForm\\$DMH")
|
.replaceAll("DirectMethodHandle\\$Holder", "LambdaForm\\$DMH")
|
||||||
.replaceAll("Invokers\\$Holder", "LambdaForm\\$MH")
|
.replaceAll("Invokers\\$Holder", "LambdaForm\\$MH")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue