Open tone-test output before transmission

This commit is contained in:
Brandon McGinty (chatgpt)
2026-08-09 14:41:01 -04:00
committed by Brandon McGinty
parent d64e5125dd
commit e564bb8583
3 changed files with 22 additions and 7 deletions
+6 -6
View File
@@ -56,12 +56,8 @@ func (b *Barnard) connect(reconnect bool) bool {
// --- Tone test mode: skip all OpenAL; generate 440 Hz tone // --- Tone test mode: skip all OpenAL; generate 440 Hz tone
// --- and save incoming audio to a file. // --- and save incoming audio to a file.
// Start the tone generator goroutine. // Open the output first. Starting transmission before this succeeds
b.toneTestStop = make(chan struct{}) // leaves an orphaned tone goroutine when the path is unusable.
go StartToneGenerator(b.Client, b.toneTestStop)
b.Tx = true
// Attach the audio file saver.
saver, err := NewAudioFileSaver(b.ToneTestOutput) saver, err := NewAudioFileSaver(b.ToneTestOutput)
if err != nil { if err != nil {
b.exitWithError(err) b.exitWithError(err)
@@ -70,6 +66,10 @@ func (b *Barnard) connect(reconnect bool) bool {
b.toneTestSaver = saver b.toneTestSaver = saver
b.Client.Config.AttachAudio(saver) b.Client.Config.AttachAudio(saver)
b.toneTestStop = make(chan struct{})
go StartToneGenerator(b.Client, b.toneTestStop)
b.Tx = true
b.Connected = true b.Connected = true
return true return true
} }
+1 -1
View File
@@ -115,7 +115,7 @@ Priority 1: transport, lifecycle, and correctness
closure: signal stop, wait for run to finish/close stdin and Wait ffmpeg, closure: signal stop, wait for run to finish/close stdin and Wait ffmpeg,
then return its result. Do not close stdin concurrently from Stop. then return its result. Do not close stdin concurrently from Stop.
14. Tone-test startup leaks transmission on output-file error [x] 14. Tone-test startup leaks transmission on output-file error
File: client.go File: client.go
connect starts StartToneGenerator and sets Tx before NewAudioFileSaver. If connect starts StartToneGenerator and sets Tx before NewAudioFileSaver. If
output file creation fails, the tone goroutine continues. Create the saver output file creation fails, the tone goroutine continues. Create the saver
+15
View File
@@ -0,0 +1,15 @@
package main
import (
"path/filepath"
"testing"
)
// Regression: tone transmission was started before opening its output file,
// so a creation error left audio transmission running without cleanup.
func TestNewAudioFileSaverReportsUnavailableOutputPath(t *testing.T) {
path := filepath.Join(t.TempDir(), "missing", "tone.pcm")
if saver, err := NewAudioFileSaver(path); err == nil || saver != nil {
t.Fatalf("got saver=%v err=%v", saver, err)
}
}