go.mod github.com/Microsoft/hcsshim v0.8.16
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
38
vendor/github.com/Microsoft/hcsshim/process.go
generated
vendored
38
vendor/github.com/Microsoft/hcsshim/process.go
generated
vendored
@ -1,7 +1,9 @@
|
||||
package hcsshim
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/Microsoft/hcsshim/internal/hcs"
|
||||
@ -9,7 +11,10 @@ import (
|
||||
|
||||
// ContainerError is an error encountered in HCS
|
||||
type process struct {
|
||||
p *hcs.Process
|
||||
p *hcs.Process
|
||||
waitOnce sync.Once
|
||||
waitCh chan struct{}
|
||||
waitErr error
|
||||
}
|
||||
|
||||
// Pid returns the process ID of the process within the container.
|
||||
@ -19,7 +24,14 @@ func (process *process) Pid() int {
|
||||
|
||||
// Kill signals the process to terminate but does not wait for it to finish terminating.
|
||||
func (process *process) Kill() error {
|
||||
return convertProcessError(process.p.Kill(), process)
|
||||
found, err := process.p.Kill(context.Background())
|
||||
if err != nil {
|
||||
return convertProcessError(err, process)
|
||||
}
|
||||
if !found {
|
||||
return &ProcessError{Process: process, Err: ErrElementNotFound, Operation: "hcsshim::Process::Kill"}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Wait waits for the process to exit.
|
||||
@ -30,7 +42,21 @@ func (process *process) Wait() error {
|
||||
// WaitTimeout waits for the process to exit or the duration to elapse. It returns
|
||||
// false if timeout occurs.
|
||||
func (process *process) WaitTimeout(timeout time.Duration) error {
|
||||
return convertProcessError(process.p.WaitTimeout(timeout), process)
|
||||
process.waitOnce.Do(func() {
|
||||
process.waitCh = make(chan struct{})
|
||||
go func() {
|
||||
process.waitErr = process.Wait()
|
||||
close(process.waitCh)
|
||||
}()
|
||||
})
|
||||
t := time.NewTimer(timeout)
|
||||
defer t.Stop()
|
||||
select {
|
||||
case <-t.C:
|
||||
return &ProcessError{Process: process, Err: ErrTimeout, Operation: "hcsshim::Process::Wait"}
|
||||
case <-process.waitCh:
|
||||
return process.waitErr
|
||||
}
|
||||
}
|
||||
|
||||
// ExitCode returns the exit code of the process. The process must have
|
||||
@ -45,14 +71,14 @@ func (process *process) ExitCode() (int, error) {
|
||||
|
||||
// ResizeConsole resizes the console of the process.
|
||||
func (process *process) ResizeConsole(width, height uint16) error {
|
||||
return convertProcessError(process.p.ResizeConsole(width, height), process)
|
||||
return convertProcessError(process.p.ResizeConsole(context.Background(), width, height), process)
|
||||
}
|
||||
|
||||
// Stdio returns the stdin, stdout, and stderr pipes, respectively. Closing
|
||||
// these pipes does not close the underlying pipes; it should be possible to
|
||||
// call this multiple times to get multiple interfaces.
|
||||
func (process *process) Stdio() (io.WriteCloser, io.ReadCloser, io.ReadCloser, error) {
|
||||
stdin, stdout, stderr, err := process.p.Stdio()
|
||||
stdin, stdout, stderr, err := process.p.StdioLegacy()
|
||||
if err != nil {
|
||||
err = convertProcessError(err, process)
|
||||
}
|
||||
@ -62,7 +88,7 @@ func (process *process) Stdio() (io.WriteCloser, io.ReadCloser, io.ReadCloser, e
|
||||
// CloseStdin closes the write side of the stdin pipe so that the process is
|
||||
// notified on the read side that there is no more data in stdin.
|
||||
func (process *process) CloseStdin() error {
|
||||
return convertProcessError(process.p.CloseStdin(), process)
|
||||
return convertProcessError(process.p.CloseStdin(context.Background()), process)
|
||||
}
|
||||
|
||||
// Close cleans up any state associated with the process but does not kill
|
||||
|
Reference in New Issue
Block a user