Skip to content
This repository was archived by the owner on May 6, 2024. It is now read-only.

Commit 2428801

Browse files
author
Benjamin M. Schwartz
authored
Merge pull request #10 from Jigsaw-Code/bemasc-retry
Ensure that retrier.conn is never nil
2 parents 8976732 + 8cc54d9 commit 2428801

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

tunnel/intra/retrier.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,11 @@ func (r *retrier) Read(buf []byte) (n int, err error) {
135135

136136
func (r *retrier) retry(buf []byte) (n int, err error) {
137137
r.conn.Close()
138-
if r.conn, err = net.DialTCP(r.network, nil, r.addr); err != nil {
138+
var newConn *net.TCPConn
139+
if newConn, err = net.DialTCP(r.network, nil, r.addr); err != nil {
139140
return
140141
}
142+
r.conn = newConn
141143
first, second := splitHello(r.hello)
142144
r.stats.Split = int16(len(first))
143145
// Set Retry to a non-nil value, indicating that a retry occurred.

tunnel/intra/retrier_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,21 @@ func TestFailedRetry(t *testing.T) {
247247
s.checkStats(BUFSIZE, 1, false)
248248
}
249249

250+
func TestDisappearingServer(t *testing.T) {
251+
s := makeSetup(t)
252+
s.sendUp()
253+
s.close()
254+
s.serverSide.Close()
255+
// Try to read 1 byte to trigger the retry.
256+
n, err := s.clientSide.Read(make([]byte, 1))
257+
if n > 0 || err == nil {
258+
t.Error("Expected read to fail")
259+
}
260+
s.clientSide.CloseRead()
261+
s.clientSide.CloseWrite()
262+
s.checkNoStats()
263+
}
264+
250265
func TestSequentialClose(t *testing.T) {
251266
s := makeSetup(t)
252267
s.sendUp()

0 commit comments

Comments
 (0)