RFR (XS): 8167995: -Xlog:defaultmethods=debug: lengthy method descriptor triggers "StringStream is re-allocated with a different ResourceMark"
David Holmes
david.holmes at oracle.com
Tue Oct 25 05:41:36 UTC 2016
Hi Rachel,
On 25/10/2016 6:17 AM, Rachel Protacio wrote:
> Hi,
>
> Please review this small fix, which removes two nested ResourceMark's
> that were causing problems with defaultmethods logging.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8167995
> Open webrev: http://cr.openjdk.java.net/~rprotacio/8167995.00/
>
> Tested with JPRT.
It is tricky to determine who has responsibility for positioning the
ResourceMarks. Looking at this call chain it initially appeared to me
that we now had a missing RM for the code at line #80:
813 slot->print_on(logstream);
=>
590 void print_on(outputStream* str) const {
591 print_slot(str, name(), signature());
592 }
=>
79 static void print_slot(outputStream* str, Symbol* name, Symbol*
signature) {
80 str->print("%s%s", name->as_C_string(), signature->as_C_string());
81 }
but we actually have a RM higher up at:
787 ResourceMark rm(THREAD);
so that is good, but then we also have a nested ResourceMark further down:
795 if (log_is_enabled(Debug, defaultmethods)) {
796 ResourceMark rm;
I must admit I'm unclear if ResourceMarks should never be nested, or
should be nested "carefully" - and if the latter exactly what that means
and how to recognize it.
Thanks,
David
-----
> Thanks!
> Rachel
More information about the hotspot-runtime-dev
mailing list