Commit cc9a108
Eric Bower
·
2026-02-26 09:31:40 -0500 EST
parent 9df8384
fix(pssh): fix race
2 files changed,
+9,
-2
+4,
-0
| ... | ... | @@ -319,6 +319,8 @@ type SSHServer struct { | |
| 319 | 319 | SessionsCreated *prometheus.CounterVec | |
| 320 | 320 | SessionsFinished *prometheus.CounterVec | |
| 321 | 321 | SessionsDuration *prometheus.CounterVec | |
| 322 | + | ||
| 323 | + | Mu sync.Mutex | |
| 322 | 324 | } | |
| 323 | 325 | ||
| 324 | 326 | func (s *SSHServer) ListenAndServe() error { |
| ... | ... | @@ -379,7 +381,9 @@ func (s *SSHServer) ListenAndServe() error { | |
| 379 | 381 | return err | |
| 380 | 382 | } | |
| 381 | 383 | ||
| 384 | + | s.Mu.Lock() | |
| 382 | 385 | s.Listener = listen | |
| 386 | + | s.Mu.Unlock() | |
| 383 | 387 | defer func() { | |
| 384 | 388 | _ = s.Listener.Close() | |
| 385 | 389 | }() |
+5,
-2
| ... | ... | @@ -520,8 +520,11 @@ func TestSSHServerCommandParsing(t *testing.T) { | |
| 520 | 520 | // Wait for server to be ready and get the actual listening address | |
| 521 | 521 | var actualAddr string | |
| 522 | 522 | for i := 0; i < 50; i++ { | |
| 523 | - | if server.Listener != nil { | |
| 524 | - | actualAddr = server.Listener.Addr().String() | |
| 523 | + | server.Mu.Lock() | |
| 524 | + | listener := server.Listener | |
| 525 | + | server.Mu.Unlock() | |
| 526 | + | if listener != nil { | |
| 527 | + | actualAddr = listener.Addr().String() | |
| 525 | 528 | break | |
| 526 | 529 | } | |
| 527 | 530 | time.Sleep(10 * time.Millisecond) |