MCPcopy
hub / github.com/passteque/gluetun / start

Function start

internal/command/start.go:21–69  ·  view source on GitHub ↗
(cmd execCmd)

Source from the content-addressed store, hash-verified

19}
20
21func start(cmd execCmd) (stdoutLines, stderrLines <-chan string,
22 waitError <-chan error, startErr error,
23) {
24 stop := make(chan struct{})
25 stdoutReady := make(chan struct{})
26 stdoutLinesCh := make(chan string)
27 stdoutDone := make(chan struct{})
28 stderrReady := make(chan struct{})
29 stderrLinesCh := make(chan string)
30 stderrDone := make(chan struct{})
31
32 stdout, err := cmd.StdoutPipe()
33 if err != nil {
34 return nil, nil, nil, err
35 }
36 go streamToChannel(stdoutReady, stop, stdoutDone, stdout, stdoutLinesCh)
37
38 stderr, err := cmd.StderrPipe()
39 if err != nil {
40 _ = stdout.Close()
41 close(stop)
42 <-stdoutDone
43 return nil, nil, nil, err
44 }
45 go streamToChannel(stderrReady, stop, stderrDone, stderr, stderrLinesCh)
46
47 err = cmd.Start()
48 if err != nil {
49 _ = stdout.Close()
50 _ = stderr.Close()
51 close(stop)
52 <-stdoutDone
53 <-stderrDone
54 return nil, nil, nil, err
55 }
56
57 waitErrorCh := make(chan error)
58 go func() {
59 err := cmd.Wait()
60 _ = stdout.Close()
61 _ = stderr.Close()
62 close(stop)
63 <-stdoutDone
64 <-stderrDone
65 waitErrorCh <- err
66 }()
67
68 return stdoutLinesCh, stderrLinesCh, waitErrorCh, nil
69}
70
71func streamToChannel(ready chan<- struct{},
72 stop <-chan struct{}, done chan<- struct{},

Callers 2

StartMethod · 0.70
Test_startFunction · 0.70

Calls 6

streamToChannelFunction · 0.85
CloseMethod · 0.80
StdoutPipeMethod · 0.65
StderrPipeMethod · 0.65
StartMethod · 0.65
WaitMethod · 0.65

Tested by 1

Test_startFunction · 0.56