[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