Jigsaw Enhancement RFR round #3: 8159145 Add JVMTI function GetNamedModule

Daniel D. Daugherty daniel.daugherty at oracle.com
Wed Jun 29 14:59:06 UTC 2016


On 6/29/16 2:53 AM, serguei.spitsyn at oracle.com wrote:
> On 6/29/16 01:45, Jesper Wilhelmsson wrote:
>> 29 juni 2016 kl. 04:30 skrev David Holmes <david.holmes at oracle.com>:
>>>> On 29/06/2016 12:09 PM, serguei.spitsyn at oracle.com wrote:
>>>>> On 6/28/16 18:44, David Holmes wrote:
>>>>>> On 29/06/2016 7:09 AM, serguei.spitsyn at oracle.com wrote:
>>>>>>> On 6/28/16 14:02, Daniel D. Daugherty wrote:
>>>>>>>> On 6/28/16 2:11 PM, serguei.spitsyn at oracle.com wrote:
>>>>>>>>> On 6/28/16 11:19, Daniel D. Daugherty wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>         I'll have to check the upper layers of this API, but 
>>>>>>>>> if an
>>>>>>>>>         agent can pass a bad 'class_loader' parameter and get 
>>>>>>>>> this
>>>>>>>>>         assert() to fire, then that's not good. Hopefully a bad
>>>>>>>>>         'class_loader' parameter is caught at a higher layer.
>>>>>>>> Not sure, what do you mean.
>>>>>>>> Do you mean the generated JVMTI upper layer or the
>>>>>>>> JvmtiEnv::GetNamedModule?
>>>>>>>> Probably, the generated code.
>>>>>>> I did mean the generated layer.
>>>>>> Ok, thanks.
>>>>>>
>>>>>>>
>>>>>>>>>         Update: Yes, passing a non-NULL jobject as the 
>>>>>>>>> class_loader
>>>>>>>>> parameter
>>>>>>>>>             when the jobject does not refer to a "class 
>>>>>>>>> loader" is
>>>>>>>>> caught
>>>>>>>>>             at the upper layer.
>>>>>>>> The upper layer does not check that it is a class loader, just for
>>>>>>>> non-NULL.
>>>>>>>> I think, it is good to have an assert here to double-checks the
>>>>>>>> pre-conditions as other caller can be added later.
>>>>>>>> But I'm Ok to get rid of it if you suggest.
>>>>>>> Please keep the asserts. Basically I was mumbling to myself to
>>>>>>> make sure that the asserts could not be reached by user code
>>>>>>> and the "Update:" was to indicate that I did do.
>>>>>> Ok, thanks.
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>>> src/share/vm/prims/jvmti.xml
>>>>>>>>>     L6550:         <param id="module_ptr">
>>>>>>>>>     L6551: <outptr><jobject/></outptr>
>>>>>>>>>     L6552:           <description>
>>>>>>>>>     L6553:             On return, points to a
>>>>>>>>> <code>java.lang.reflect.Module</code> object.
>>>>>>>>>     L6554:           </description>
>>>>>>>>>     L6555:         </param>
>>>>>>>>>
>>>>>>>>>         The above wording doesn't allow for module_ptr to be NULL
>>>>>>>>> which
>>>>>>>>>         is a mismatch with the description.
>>>>>>>> I disagree (or maybe I got it incorrectly).
>>>>>>>> Pointing to NULL and be NULL is different.
>>>>>>>> It is not allowed for the module_ptr to be NULL but Ok to pint to
>>>>>>>> NULL on return.
>>>>>>> I think the description needs to be:
>>>>>>>
>>>>>>>     On return, points to a <code>java.lang.reflect.Module</code> 
>>>>>>> object
>>>>>>>     or points to a <code>NULL</code>.
>>>>>> Agreed, fixed.
>>>>> Disagree. You would say that a pointer is NULL, not that it points to
>>>>> a NULL.
>>>> Why are you disagree?
>>>> The module_ptr is an out argument, it is not allowed to be NULL.
>>>> But the returning value by this pointer can be NULL.
>>> As per later email I see this terminology already exists so is fine, 
>>> but I find it confusing to say "points to a NULL" - a NULL is not an 
>>> entity. If "foo points to a NULL" that implies to me "foo == &NULL;" 
>>> which is nonsense - foo == NULL, and if foo==NULL then foo points to 
>>> nothing. But the "pointer to a pointer" aspect here does confuse 
>>> things.
>> I would prefer if it said "points to a NULL pointer", or 
>> NULL-pointer. I'm not sure what would be the more correct way to 
>> write it. Anyway, a NULL pointer is an entity :-)
> Jesper,
>
> Thank you for the comment.
> In fact, I've just used a pattern that is already present in the JVMTI 
> spec.
> Objections to the existing pattern are minor, so it is better to be 
> more conservative here.

Perhaps we can use the wording in this JVM/TI function as a model:

http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#GetCurrentContendedMonitor

This function takes a "jobject *" as a parameter and returns a
monitor pointer via that parameter. Pretty similar to what we're
discussing...

So here's the existing wording example:

Name         Type      Description
===========  ========  ===========
monitor_ptr  jobject*  On return, filled with the current contended monitor,
                        or NULL if there is none.

                        Agent passes a pointer to a jobject. On return, the
                        jobject has been set. The object returned by 
monitor_ptr
                        is a JNI local reference and must be managed.

So for the new function:

module_ptr   jobject*  On return, filled with a 
<code>java.lang.reflect.Module</code>
                        object or NULL if there is none.

This "filled with" style is used for return parameters in
~13 places in the JVM/TI spec.

Of course, now that I've found the GetCurrentContendedMonitor
example, That second paragraph or something like it is also
going to be needed with our new function...

Spec wording is very difficult... :-)

Dan


>
> Thanks,
> Serguei
>
>
>
>> /Jesper
>>
>>
>>> Thanks,
>>> David
>>>
>>>> Thanks,
>>>> Serguei
>>>>
>>>>
>>>>> David
>>>>>
>>>>>
>>>>>> Thanks,
>>>>>> Serguei
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Dan
>



More information about the hotspot-dev mailing list