"errors"
"fmt"
"os"
+ "sync"
"sync/atomic"
"time"
"unsafe"
forcedMTU int
rate rateJuggler
rings *wintun.RingDescriptor
+ writeLock sync.Mutex
}
const WintunPool = wintun.Pool("WireGuard")
tun.rate.update(uint64(packetSize))
alignedPacketSize := wintun.PacketAlign(uint32(unsafe.Sizeof(wintun.PacketHeader{})) + packetSize)
+ tun.writeLock.Lock()
+ defer tun.writeLock.Unlock()
+
buffHead := atomic.LoadUint32(&tun.rings.Receive.Ring.Head)
if buffHead >= wintun.PacketCapacity {
return 0, os.ErrClosed