[foreign-memaccess] RFR: Fix concurrent MemoryScope.close() or MemoryScope.dup() race

Peter Levart plevart at openjdk.java.net
Tue May 12 05:17:08 UTC 2020


On Mon, 11 May 2020 22:29:27 GMT, Peter Levart <plevart at openjdk.org> wrote:

> In case a MemorySegment is not confined to an "owner" thread, it is possible to call close() or
> withOwnerThread(newThread) on it from multiple threads concurrently and such calls are not screened for thread
> confinement but just forwarded to MemoryScope.close() and .dup(). It is therefore vital that close() and dup() are made
> atomic so that cleanupAction is executed just once.

The foreign tests pass and ParallelSum benchmark doesn't show regressions:
before fix:

Benchmark                                         Mode  Cnt     Score     Error  Units
ParallelSum.segment_parallel                      avgt   30    42.298 ±   0.139  ms/op
ParallelSum.segment_parallel_bulk                 avgt   30    38.268 ±   0.318  ms/op
ParallelSum.segment_serial                        avgt   30   109.087 ±   0.618  ms/op
ParallelSum.segment_stream_findany_parallel       avgt   30  1721.486 ± 306.951  ms/op
ParallelSum.segment_stream_findany_parallel_bulk  avgt   30    32.263 ±   1.572  ms/op
ParallelSum.segment_stream_findany_serial         avgt   30  5090.839 ±  19.335  ms/op
ParallelSum.segment_stream_findany_serial_bulk    avgt   30   105.765 ±   1.527  ms/op
ParallelSum.segment_stream_parallel               avgt   30    38.995 ±   0.236  ms/op
ParallelSum.segment_stream_parallel_bulk          avgt   30    38.146 ±   0.225  ms/op
ParallelSum.unsafe_parallel                       avgt   30     6.476 ±   0.226  ms/op
ParallelSum.unsafe_serial                         avgt   30   107.892 ±   0.882  ms/op

after fix:

Benchmark                                         Mode  Cnt     Score     Error  Units
ParallelSum.segment_parallel                      avgt   30    42.195 ±   0.094  ms/op
ParallelSum.segment_parallel_bulk                 avgt   30    38.216 ±   0.269  ms/op
ParallelSum.segment_serial                        avgt   30    98.562 ±   9.357  ms/op
ParallelSum.segment_stream_findany_parallel       avgt   30  1532.052 ± 325.223  ms/op
ParallelSum.segment_stream_findany_parallel_bulk  avgt   30    32.167 ±   1.664  ms/op
ParallelSum.segment_stream_findany_serial         avgt   30  5443.200 ± 370.581  ms/op
ParallelSum.segment_stream_findany_serial_bulk    avgt   30   104.543 ±   0.924  ms/op
ParallelSum.segment_stream_parallel               avgt   30    39.010 ±   0.281  ms/op
ParallelSum.segment_stream_parallel_bulk          avgt   30    38.161 ±   0.314  ms/op
ParallelSum.unsafe_parallel                       avgt   30     6.386 ±   0.250  ms/op
ParallelSum.unsafe_serial                         avgt   30    99.642 ±   8.711  ms/op

-------------

PR: https://git.openjdk.java.net/panama-foreign/pull/160


More information about the panama-dev mailing list