in internal/proxy/proxy.go [620:657]
func (c *Client) Serve(ctx context.Context, notify func()) error {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
if c.fuseDir != "" {
return c.serveFuse(ctx, notify)
}
if c.conf.RunConnectionTest {
c.logger.Infof("Connection test started")
if _, err := c.CheckConnections(ctx); err != nil {
c.logger.Errorf("Connection test failed")
return err
}
c.logger.Infof("Connection test passed")
}
exitCh := make(chan error)
for _, m := range c.mnts {
go func(mnt *socketMount) {
err := c.serveSocketMount(ctx, mnt)
if err != nil {
select {
// Best effort attempt to send error.
// If this send fails, it means the reading goroutine has
// already pulled a value out of the channel and is no longer
// reading any more values. In other words, we report only the
// first error.
case exitCh <- err:
default:
return
}
}
}(m)
}
notify()
return <-exitCh
}