Improve: add tun io lock

This commit is contained in:
xjasonlyu
2023-03-26 22:56:01 +08:00
parent 22b15f6fab
commit 680feede3b

View File

@@ -4,6 +4,7 @@ package tun
import (
"fmt"
"sync"
"golang.zx2c4.com/wireguard/tun"
@@ -22,6 +23,8 @@ type TUN struct {
rSizes []int
rBuffs [][]byte
wBuffs [][]byte
rMutex sync.Mutex
wMutex sync.Mutex
}
func Open(name string, mtu uint32) (_ device.Device, err error) {
@@ -67,12 +70,16 @@ func Open(name string, mtu uint32) (_ device.Device, err error) {
}
func (t *TUN) Read(packet []byte) (int, error) {
t.rMutex.Lock()
defer t.rMutex.Unlock()
t.rBuffs[0] = packet
_, err := t.nt.Read(t.rBuffs, t.rSizes, t.offset)
return t.rSizes[0], err
}
func (t *TUN) Write(packet []byte) (int, error) {
t.wMutex.Lock()
defer t.wMutex.Unlock()
t.wBuffs[0] = packet
return t.nt.Write(t.wBuffs, t.offset)
}