Summary
The IOCP ready_ field is a plain long mixed between interlocked and plain
access, without release/acquire ordering for the published payload — an ordering
bug on ARM64.
Detail
win_overlapped_op.hpp:52 ready_ is a plain long accessed via both
InterlockedCompareExchange (win_scheduler.hpp:350, :579) and a plain store
(:366); dwError / bytes_transferred are published without release/acquire —
fine on x86 TSO, an ordering bug on ARM64.
Acceptance criteria
ready_ and the published payload (dwError / bytes_transferred) use
correct release/acquire ordering across all access sites.
References
win_overlapped_op.hpp:52; win_scheduler.hpp:350, :366, :579.
Raised by Gennaro Prota (code-referenced). Author triage pending. Source: Boost
ML announcement.
Summary
The IOCP
ready_field is a plainlongmixed between interlocked and plainaccess, without release/acquire ordering for the published payload — an ordering
bug on ARM64.
Detail
win_overlapped_op.hpp:52ready_is a plainlongaccessed via bothInterlockedCompareExchange(win_scheduler.hpp:350,:579) and a plain store(
:366);dwError/bytes_transferredare published without release/acquire —fine on x86 TSO, an ordering bug on ARM64.
Acceptance criteria
ready_and the published payload (dwError/bytes_transferred) usecorrect release/acquire ordering across all access sites.
References
win_overlapped_op.hpp:52;win_scheduler.hpp:350,:366,:579.Raised by Gennaro Prota (code-referenced). Author triage pending. Source: Boost
ML announcement.