Skip to content

Commit 75755d1

Browse files
committed
netstack: stop swapped tun fd after arb delay
1 parent 35f529c commit 75755d1

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

intra/netstack/fdbased.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ package netstack
3232
import (
3333
"fmt"
3434
"sync/atomic"
35+
"time"
3536

3637
"github.com/celzero/firestack/intra/log"
37-
"github.com/celzero/firestack/intra/settings"
3838
"golang.org/x/sys/unix"
3939
"gvisor.dev/gvisor/pkg/buffer"
4040
"gvisor.dev/gvisor/pkg/sync"
@@ -233,10 +233,16 @@ func createInboundDispatcher(e *endpoint, fd int) (linkDispatcher, error) {
233233
// Implements Swapper.
234234
func (e *endpoint) Swap(fd, mtu int) (err error) {
235235
var prev linkDispatcher
236+
var prevfd int
236237
defer func() {
237238
// TODO: should we let the previous dispatcher stop on EOF?
238-
if prev != nil && !settings.Debug {
239-
go prev.stop()
239+
// From prelim experiments, it seems prevfd never EOFs?
240+
if prev != nil {
241+
log.I("ns: tun(%d => %d): Swap: stopping previous dispatcher", prevfd, fd)
242+
go func() {
243+
time.Sleep(5 * time.Second) // some arbitrary delay
244+
prev.stop()
245+
}()
240246
}
241247
}()
242248

@@ -245,7 +251,7 @@ func (e *endpoint) Swap(fd, mtu int) (err error) {
245251
}
246252

247253
// commence WritePackets() on fd
248-
e.fds.Store(fd)
254+
prevfd, _ = e.fds.Swap(fd).(int)
249255
e.mtu.Store(uint32(mtu))
250256

251257
e.Lock()

0 commit comments

Comments
 (0)