diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-10-30 16:58:50 +0100 |
---|---|---|
committer | Simon Rozman <simon@rozman.si> | 2020-10-31 19:11:50 +0100 |
commit | f947205cee76a1ae9ddf555d7e2a45675fe333fd (patch) | |
tree | 2d70011349690078863efeedf066f26600603179 /api/session.c | |
parent | api: rework pool hashing (diff) | |
download | wintun-f947205cee76a1ae9ddf555d7e2a45675fe333fd.tar.xz wintun-f947205cee76a1ae9ddf555d7e2a45675fe333fd.zip |
api: use proper iso atomic semantics
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r-- | api/session.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/api/session.c b/api/session.c index 71849c3..e39f21b 100644 --- a/api/session.c +++ b/api/session.c @@ -172,7 +172,7 @@ WintunReceivePacket(_In_ TUN_SESSION *Session, _Out_bytecapcount_(*PacketSize) B Result = ERROR_HANDLE_EOF; goto cleanup; } - const ULONG BuffTail = InterlockedGetU(&Session->Descriptor.Send.Ring->Tail); + const ULONG BuffTail = ReadULongAcquire(&Session->Descriptor.Send.Ring->Tail); if (BuffTail >= Session->Capacity) { Result = ERROR_HANDLE_EOF; @@ -226,7 +226,7 @@ WintunReceiveRelease(_In_ TUN_SESSION *Session, _In_ const BYTE *Packet) Session->Send.HeadRelease = TUN_RING_WRAP(Session->Send.HeadRelease + AlignedPacketSize, Session->Capacity); Session->Send.PacketsToRelease--; } - InterlockedSetU(&Session->Descriptor.Send.Ring->Head, Session->Send.HeadRelease); + WriteULongRelease(&Session->Descriptor.Send.Ring->Head, Session->Send.HeadRelease); LeaveCriticalSection(&Session->Send.Lock); } @@ -241,7 +241,7 @@ WintunAllocateSendPacket(_In_ TUN_SESSION *Session, _In_ DWORD PacketSize, _Out_ goto cleanup; } const ULONG AlignedPacketSize = TUN_ALIGN(sizeof(TUN_PACKET) + PacketSize); - const ULONG BuffHead = InterlockedGetU(&Session->Descriptor.Receive.Ring->Head); + const ULONG BuffHead = ReadULongAcquire(&Session->Descriptor.Receive.Ring->Head); if (BuffHead >= Session->Capacity) { Result = ERROR_HANDLE_EOF; @@ -281,8 +281,8 @@ WintunSendPacket(_In_ TUN_SESSION *Session, _In_ const BYTE *Packet) TUN_RING_WRAP(Session->Receive.TailRelease + AlignedPacketSize, Session->Capacity); Session->Receive.PacketsToRelease--; } - InterlockedSetU(&Session->Descriptor.Receive.Ring->Tail, Session->Receive.TailRelease); - if (InterlockedGet(&Session->Descriptor.Receive.Ring->Alertable)) + WriteULongRelease(&Session->Descriptor.Receive.Ring->Tail, Session->Receive.TailRelease); + if (ReadAcquire(&Session->Descriptor.Receive.Ring->Alertable)) SetEvent(Session->Descriptor.Receive.TailMoved); LeaveCriticalSection(&Session->Receive.Lock); } |