Skip to content

Commit ed82c9e

Browse files
committed
Fix panic when a connection comes before tsserver is ready
1 parent be3ea53 commit ed82c9e

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44

55
`wush` is a command line tool that lets you easily transfer
66
files and open shells over a peer-to-peer wireguard connection. It's similar to [magic-wormhole](https://github.com/magic-wormhole/magic-wormhole) but doesn't require you to
7-
set up a relay server.
7+
set up or trust a relay server.
88

99
## Basic Usage
1010

1111
Install:
12-
```
12+
13+
```bash
1314
go install github.com/coder/wush/cmd/wush@latest
14-
```
15+
```

overlay/receive.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"net"
1111
"net/netip"
1212
"sync"
13+
"sync/atomic"
1314
"time"
1415

1516
"github.com/pion/stun/v3"
@@ -59,7 +60,7 @@ type Receive struct {
5960
// 100.64.x.x.
6061
nextPeerIP uint16
6162

62-
lastNode *tailcfg.Node
63+
lastNode atomic.Pointer[tailcfg.Node]
6364
in chan *tailcfg.Node
6465
out chan *tailcfg.Node
6566
}
@@ -155,7 +156,7 @@ func (r *Receive) ListenOverlaySTUN(ctx context.Context) (<-chan struct{}, error
155156
case <-ctx.Done():
156157
return
157158
case node := <-r.out:
158-
r.lastNode = node
159+
r.lastNode.Store(node)
159160
raw, err := json.Marshal(overlayMessage{
160161
Typ: messageTypeNodeUpdate,
161162
Node: *node,
@@ -271,7 +272,7 @@ func (r *Receive) ListenOverlayDERP(ctx context.Context) error {
271272
case <-ctx.Done():
272273
return
273274
case node := <-r.out:
274-
r.lastNode = node
275+
r.lastNode.Store(node)
275276
raw, err := json.Marshal(overlayMessage{
276277
Typ: messageTypeNodeUpdate,
277278
Node: *node,
@@ -346,7 +347,9 @@ func (r *Receive) handleNextMessage(msg []byte, system string) (resRaw []byte, n
346347
fmt.Println(cliui.Timestamp(time.Now()), "Received updated node from", cliui.Code(ovMsg.Node.Key.String()))
347348
r.in <- &ovMsg.Node
348349
res.Typ = messageTypeNodeUpdate
349-
res.Node = *r.lastNode
350+
if lastNode := r.lastNode.Load(); lastNode != nil {
351+
res.Node = *lastNode
352+
}
350353
}
351354

352355
if res.Typ == 0 {

0 commit comments

Comments
 (0)