Fix socket mapping socket mapping nits

Fixes nits that were suggested in #20420. The caller of
`ListenAndWaitOnSocket` did not use the value returned by the conn
channel, therefore it was better to just close the conn in the
`ListenAndWaitOnSocket` function instead.

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
This commit is contained in:
Jake Correnti
2023-11-09 10:41:50 -05:00
parent d7d8b86e59
commit 39d647a2f6
3 changed files with 9 additions and 24 deletions

View File

@ -669,24 +669,14 @@ func (m *MacMachine) Start(name string, opts machine.StartOptions) error {
} }
logrus.Debug("waiting for ready notification") logrus.Debug("waiting for ready notification")
var conn net.Conn
readyChan := make(chan error) readyChan := make(chan error)
connChan := make(chan net.Conn) go machine.ListenAndWaitOnSocket(readyChan, readyListen)
go machine.ListenAndWaitOnSocket(readyChan, connChan, readyListen)
if err := cmd.Start(); err != nil { if err := cmd.Start(); err != nil {
return err return err
} }
err = <-readyChan err = <-readyChan
conn = <-connChan
if conn != nil {
defer func() {
if closeErr := conn.Close(); closeErr != nil {
logrus.Error(closeErr)
}
}()
}
if err != nil { if err != nil {
return err return err
} }

View File

@ -274,16 +274,7 @@ func (hv *HVSockRegistryEntry) Listen() error {
}() }()
errChan := make(chan error) errChan := make(chan error)
connChan := make(chan net.Conn) go machine.ListenAndWaitOnSocket(errChan, listener)
go machine.ListenAndWaitOnSocket(errChan, connChan, listener)
conn := <-connChan
if conn != nil {
defer func() {
if err := conn.Close(); err != nil {
logrus.Error(err)
}
}()
}
return <-errChan return <-errChan
} }

View File

@ -30,16 +30,20 @@ func ReadySocketPath(runtimeDir, machineName string) string {
// ListenAndWaitOnSocket waits for a new connection to the listener and sends // ListenAndWaitOnSocket waits for a new connection to the listener and sends
// any error back through the channel. ListenAndWaitOnSocket is intended to be // any error back through the channel. ListenAndWaitOnSocket is intended to be
// used as a goroutine // used as a goroutine
func ListenAndWaitOnSocket(errChan chan<- error, connChan chan<- net.Conn, listener net.Listener) { func ListenAndWaitOnSocket(errChan chan<- error, listener net.Listener) {
conn, err := listener.Accept() conn, err := listener.Accept()
if err != nil { if err != nil {
errChan <- err errChan <- err
connChan <- nil
return return
} }
_, err = bufio.NewReader(conn).ReadString('\n') _, err = bufio.NewReader(conn).ReadString('\n')
if closeErr := conn.Close(); closeErr != nil {
errChan <- closeErr
return
}
errChan <- err errChan <- err
connChan <- conn
} }
// DialSocketWithBackoffs attempts to connect to the socket in maxBackoffs attempts // DialSocketWithBackoffs attempts to connect to the socket in maxBackoffs attempts