Thread safety check of MemorySegment

Johannes Lichtenberger lichtenberger.johannes at gmail.com
Wed Jul 22 10:26:44 UTC 2020


I'm also using a mapped memory segment. But I think at least we have the
possibility to transfer ownership in Java 15, right? Thus, in my
AutoClosable in the close() method I can simply transfer ownership to the
current thread if the segment is still alive :-)

Kind regards
Johanmes

Maurizio Cimadamore <maurizio.cimadamore at oracle.com> schrieb am Mi., 22.
Juli 2020, 11:51:

>
> On 22/07/2020 00:44, Johannes Lichtenberger wrote:
>
> So, it likely will not be part of Java 15, right?
>
> Right.
>
>
> I'm running into the same problem, when I'm sharing a transaction (only
> one thread ever accesses it) with another thread and the other thread
> closes the transaction. Same problem with the segment close()-method.
>
> Are you too also using mapped segments? Or just plain native segments
> allocated with MemorySegment::allocateNative?
>
> Thanks
> Maurizio
>
>
> kind regards
> Johannes
>
> Am Mi., 22. Juli 2020 um 01:24 Uhr schrieb Maurizio Cimadamore <
> maurizio.cimadamore at oracle.com>:
>
>>
>> On 21/07/2020 22:51, NekoCaffeine wrote:
>> >> https://gist.github.com/mcimadamore/128ee904157bb6c729a10596e69edffd
>> > This is a great example.
>> >
>> >> The *right* solution from an API perspective is to find a way to
>> disable confinement in a way that works
>> > I very much agree with this point, which is exactly what I want to
>> express.
>> >
>> > So from a design rather than implementation perspective, should I
>> expect a new way to disable thread checking or should I use
>> CustomMappedSegment?
>>
>> So the crux of the issue here is that there's no Runnable that will
>> unmap a given mapped address. But such a Runnable can be implemented in
>> several ways:
>>
>> * with plain JNI
>> * using the ForeignLinker API (although that is not part of JDK 15 - but
>> is available in the Panama repo)
>> * going all in and re-implement mapped segment (similar to what I've
>> done with CustomMappedSegment)
>>
>> I think from an API perspective, if we manage to solve the confinement
>> problem, then I expect the memory segment API will have an extra method
>> to either turn a confined segment into an unconfined one, or vice-versa.
>> So you will be able to just create your mapped segment using mapFromPath
>> and then just 'share' it (and make it unconfined).
>>
>> Hope this helps.
>>
>> Maurizio
>>
>> >
>> > Thanks,
>> >
>> > NekoCaffeine
>>
>


More information about the panama-dev mailing list