Skip to content
Snippets Groups Projects
Commit 634c2589 authored by kr328's avatar kr328
Browse files

Fix: should close all endpoint on exit

parent 42f5331a
No related branches found
No related tags found
No related merge requests found
......@@ -9,13 +9,18 @@ import (
)
type context struct {
stack tun2socket.Stack
device *os.File
stack tun2socket.Stack
}
var lock sync.Mutex
var tun *context
func (ctx *context) close() {
_ = ctx.stack.Close()
_ = ctx.device.Close()
}
func Start(fd, mtu int, dns string) error {
lock.Lock()
defer lock.Unlock()
......@@ -33,11 +38,15 @@ func Start(fd, mtu int, dns string) error {
return err
}
ctx := &context{
device: device,
stack: stack,
}
go func() {
// device -> lwip
defer device.Close()
defer stack.Close()
defer ctx.close()
buf := make([]byte, mtu)
......@@ -54,8 +63,7 @@ func Start(fd, mtu int, dns string) error {
go func() {
// lwip -> device
defer device.Close()
defer stack.Close()
defer ctx.close()
buf := make([]byte, mtu)
......@@ -72,7 +80,7 @@ func Start(fd, mtu int, dns string) error {
go func() {
// lwip tcp
defer stack.TCP().Close()
defer ctx.close()
for {
conn, err := stack.TCP().Accept()
......@@ -96,7 +104,7 @@ func Start(fd, mtu int, dns string) error {
go func() {
// lwip udp
defer stack.UDP().Close()
defer ctx.close()
for {
buf := allocUDP(mtu)
......@@ -123,10 +131,7 @@ func Start(fd, mtu int, dns string) error {
}
}()
tun = &context{
stack: stack,
device: device,
}
tun = ctx
return nil
}
......@@ -140,8 +145,7 @@ func Stop() {
func stopLocked() {
if tun != nil {
tun.device.Close()
tun.stack.Close()
tun.close()
}
tun = nil
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment