Review Request: JDK-8157464: StackWalker.getCallerClass() is not

Coleen Phillimore coleen.phillimore at oracle.com
Tue Sep 13 22:43:34 UTC 2016



On 9/13/16 6:23 PM, Mandy Chung wrote:
> Hi Coleen,
>
> Thanks for the review.
>
>
>> On Sep 13, 2016, at 2:32 PM, Coleen Phillimore <coleen.phillimore at oracle.com> wrote:
>>
>>
>>
>> On 9/13/16 2:54 PM, Daniel Fuchs wrote:
>>> Hi Mandy,
>>>
>>> This looks good to me.
>>> But I wonder about these 5 lines - isn't this introducing a change
>>> of behavior if the caller is an anonymous class?
>>>
>>> 149       InstanceKlass* ik = method->method_holder();
>>> 150       if (ik->is_anonymous()) {
>>> 151         // use the host class as the caller class
>>> 152         ik = ik->host_klass();
>>> 153       }
>>>
>>> What is the reason for returning the host class instead?
>> Somehow I think you want to see all the lambda classes in the stack trace, or skip them but the host class might be confusing because it's something like  java/lang/invoke/LambdaForm a lot of the time.   At least you'd get java.lang.invoke.LambdaForm$BMH/1170794006 which has a little more information.
>>
> StackWalker::walk wants to see all lambda classes in the stack trrace (if SHOW_HIDDEN_FRAMES is set).  StackWalker::getCallerClass does not since it wants to find the true caller. I have revised the patch to skip the hidden frames instead:
>     http://cr.openjdk.java.net/~mchung/jdk9/webrevs/8157464/webrev.02/

Yes, this looks really good.
>
>
>> http://cr.openjdk.java.net/~mchung/jdk9/webrevs/8157464/webrev.01/hotspot/src/share/vm/prims/stackwalk.cpp.udiff.html
>>
>> + THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(),
>>
>> I think you need ResourceMark rm(THREAD); above this line.
>>
> Fixed.  Thanks for catching it.
>
>> I can't review the test because I'm not sure what it's doing.  Does it create a module just for the test?
>>
> It creates a module called “csm” where CallerSensitiveTest class is in and then invoke CallerSensitiveTest with and without security manager.  This test can run in an unnamed module but I chose it as an example to build a module.
>
> This test invokes StackWalker::getCallerClass via static reference, reflection, MethodHandle, lambda.  Also verify that StackWalker::getCallerClass can't be called from @CallerSensitive method.

Ok, great.  I think it's appropriate for the test to be in the jdk 
repository even though the change is in hotspot because it mostly tests 
the stack walking feature.
thanks,
Coleen

> Mandy
>



More information about the hotspot-runtime-dev mailing list