diff options
| -rw-r--r-- | api/session.c | 1 | ||||
| -rw-r--r-- | driver/wintun.c | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/api/session.c b/api/session.c index ab96c64..13d5bca 100644 --- a/api/session.c +++ b/api/session.c @@ -302,6 +302,7 @@ WintunSendPacket(TUN_SESSION *Session, const BYTE *Packet) if (Session->Descriptor.Receive.Ring->Tail != Session->Receive.TailRelease) { WriteULongRelease(&Session->Descriptor.Receive.Ring->Tail, Session->Receive.TailRelease); + MemoryBarrier(); if (ReadAcquire(&Session->Descriptor.Receive.Ring->Alertable)) SetEvent(Session->Descriptor.Receive.TailMoved); } diff --git a/driver/wintun.c b/driver/wintun.c index 82e346b..72ba5d3 100644 --- a/driver/wintun.c +++ b/driver/wintun.c @@ -481,6 +481,7 @@ TunProcessReceiveData(_Inout_ TUN_CTX *Ctx) if (RingHead == RingTail) { WriteRelease(&Ring->Alertable, TRUE); + MemoryBarrier(); RingTail = ReadULongAcquire(&Ring->Tail); if (RingHead == RingTail) { |
