aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/session.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/api/session.c b/api/session.c
index c48d5cb..a900a0a 100644
--- a/api/session.c
+++ b/api/session.c
@@ -293,8 +293,10 @@ WintunSendPacket(_In_ TUN_SESSION *Session, _In_ const BYTE *Packet)
TUN_RING_WRAP(Session->Receive.TailRelease + AlignedPacketSize, Session->Capacity);
Session->Receive.PacketsToRelease--;
}
- WriteULongRelease(&Session->Descriptor.Receive.Ring->Tail, Session->Receive.TailRelease);
- if (ReadAcquire(&Session->Descriptor.Receive.Ring->Alertable))
- SetEvent(Session->Descriptor.Receive.TailMoved);
+ if (Session->Descriptor.Receive.Ring->Tail != Session->Receive.TailRelease) {
+ 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);
}