[foreign] RFR 8217414: Remove bounds check in BoundedPointer constructor

Jorn Vernee jbvernee at xs4all.nl
Mon Jan 21 13:54:44 UTC 2019


Ok, I see your point. Plus, if a user finds the API too restrictive they 
could always fall back on native allocation APIs like malloc & free, or 
possibly custom LayoutTypes when those are introduced.

I think it will be sufficient to move the check to 
`References.OfPointer` and `References.OfCallback`. But I will add some 
tests to make sure as well.

Jorn

Maurizio Cimadamore schreef op 2019-01-21 14:42:
> On 21/01/2019 13:12, Jorn Vernee wrote:
>> There is a `checkAlive()` that gets called when a pointer is unboxed 
>> [1], I thought you were talking about that check. But, I don't think 
>> we should do a bounds check before passing a pointer to native code. 
>> The "one past the end of a container" pointer idiom is common and some 
>> APIs might expect to be passed such a pointer. It seems too 
>> restrictive to require that pointers passed to native code have to be 
>> in bounds (tbh I have my doubts about the liveliness check as well).
> 
> The whole point of the Panama API is to provide enriched safety. Now,
> if users want to opt out of that, we might (in the future) provide
> knobs to do so, but I see no point for passing a pointer that is not
> alive around (given it is known to contain garbage). Similarly, I see
> very little point in passing a pointer that is out of bounds - granted
> there might be few use cases for that (e.g. pass a 'limit' pointer to
> a library), but I'd prefer to stick with stricter semantics and loosen
> that up on a use case by use case basis.
> 
> I think the main point of this patch should be to _delay_ the check
> that is currently done on the constructor, not to remove it
> completely. It is ok if some piece of code temporarily produces an out
> of bound pointers (e.g. when iterating), but I think we should limit
> the exposure of that weird pointer to the rest of the machinery.
> 
> Maurizio
> 
>> 
>> Jorn
>> 
>> [1] : 
>> http://hg.openjdk.java.net/panama/dev/file/tip/src/java.base/share/classes/jdk/internal/foreign/memory/BoundedPointer.java#l75
>> 
>> Maurizio Cimadamore schreef op 2019-01-21 13:56:
>>> I agree that the check should removed from the constructor - but we
>>> should make sure that checks happen when the pointer is used.
>>> Dereference is one situation, function call is another. I guess
>>> dereference is already covered (after all, a memory read will fail if
>>> outside the boundaries), but I don't think passing an out of bound
>>> pointer to a function is currently being checked, and it should if we
>>> remove the constructor eager check
>>> 
>>> Maurizio
>>> 
>>> On 21/01/2019 12:00, Jorn Vernee wrote:
>>>> Hi,
>>>> 
>>>> I have a patch addressing 2 vacuously passing tests (api/PointerTest 
>>>> and api/ArrayTest). The patch fixes the tests, and to make that 
>>>> happen removes the bounds check in BoundedPointer's constructor. As 
>>>> discussed offline; this check is not needed since we already de a 
>>>> check when dereferencing a pointer in BoundedMemoryRegion, and the 
>>>> check in the constructor is overly restrictive since it should be 
>>>> fine to create out-of-bounds pointers as long as it is not 
>>>> dereferenced. This does mean the tests needed to be tweaked since 
>>>> now an access exception is throw at a later point.
>>>> 
>>>> Please review the following.
>>>> 
>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8217414
>>>> Webrev: 
>>>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/8217414/webrev.00
>>>> 
>>>> Thanks,
>>>> Jorn


More information about the panama-dev mailing list