From 4ec7fa0202e2829d5260e38d23fd388b09b20ae1 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Mon, 25 Nov 2024 14:39:15 -0500 Subject: [PATCH] cleanup: remove package bicopy This has a single caller that doesn't even use the full interface. Signed-off-by: Tamir Duberstein --- pkg/bicopy/bicopy.go | 81 ------------------------------------ pkg/hostagent/port_darwin.go | 25 +++++++++-- 2 files changed, 22 insertions(+), 84 deletions(-) delete mode 100644 pkg/bicopy/bicopy.go diff --git a/pkg/bicopy/bicopy.go b/pkg/bicopy/bicopy.go deleted file mode 100644 index 3db68521620..00000000000 --- a/pkg/bicopy/bicopy.go +++ /dev/null @@ -1,81 +0,0 @@ -// From https://raw.githubusercontent.com/norouter/norouter/v0.6.5/pkg/agent/bicopy/bicopy.go -/* - Copyright (C) NoRouter authors. - - Copyright (C) libnetwork authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package bicopy - -import ( - "io" - "sync" - - "github.com/sirupsen/logrus" -) - -// Bicopy is from https://github.com/rootless-containers/rootlesskit/blob/v0.10.1/pkg/port/builtin/parent/tcp/tcp.go#L73-L104 -// (originally from libnetwork, Apache License 2.0). -func Bicopy(x, y io.ReadWriter, quit <-chan struct{}) { - type closeReader interface { - CloseRead() error - } - type closeWriter interface { - CloseWrite() error - } - var wg sync.WaitGroup - broker := func(to, from io.ReadWriter) { - if _, err := io.Copy(to, from); err != nil { - logrus.WithError(err).Debug("failed to call io.Copy") - } - if fromCR, ok := from.(closeReader); ok { - if err := fromCR.CloseRead(); err != nil { - logrus.WithError(err).Debug("failed to call CloseRead") - } - } - if toCW, ok := to.(closeWriter); ok { - if err := toCW.CloseWrite(); err != nil { - logrus.WithError(err).Debug("failed to call CloseWrite") - } - } - wg.Done() - } - - wg.Add(2) - go broker(x, y) - go broker(y, x) - finish := make(chan struct{}) - go func() { - wg.Wait() - close(finish) - }() - - select { - case <-quit: - case <-finish: - } - if xCloser, ok := x.(io.Closer); ok { - if err := xCloser.Close(); err != nil { - logrus.WithError(err).Debug("failed to call xCloser.Close") - } - } - if yCloser, ok := y.(io.Closer); ok { - if err := yCloser.Close(); err != nil { - logrus.WithError(err).Debug("failed to call yCloser.Close") - } - } - <-finish - // TODO: return copied bytes -} diff --git a/pkg/hostagent/port_darwin.go b/pkg/hostagent/port_darwin.go index a99897b6f3e..b2a71150796 100644 --- a/pkg/hostagent/port_darwin.go +++ b/pkg/hostagent/port_darwin.go @@ -2,17 +2,19 @@ package hostagent import ( "context" + "errors" "fmt" + "io" "net" "os" "path/filepath" "strconv" "strings" - "github.com/lima-vm/lima/pkg/bicopy" "github.com/lima-vm/lima/pkg/portfwd" "github.com/lima-vm/sshocker/pkg/ssh" "github.com/sirupsen/logrus" + "golang.org/x/sync/errgroup" ) // forwardTCP is not thread-safe. @@ -149,8 +151,25 @@ func (plf *pseudoLoopbackForwarder) forward(ac *net.TCPConn) error { return err } defer unixConn.Close() - bicopy.Bicopy(ac, unixConn, nil) - return nil + + g, _ := errgroup.WithContext(context.Background()) + + g.Go(func() error { + _, err := io.Copy(unixConn, ac) + if errors.Is(err, io.EOF) { + err = nil + } + return errors.Join(err, unixConn.CloseRead(), ac.CloseWrite()) + }) + g.Go(func() error { + _, err := io.Copy(ac, unixConn) + if errors.Is(err, io.EOF) { + err = nil + } + return errors.Join(err, ac.CloseRead(), unixConn.CloseWrite()) + }) + + return g.Wait() } func (plf *pseudoLoopbackForwarder) Close() error {