mirror of
https://github.com/opencontainers/runc.git
synced 2025-10-06 07:56:55 +08:00

It's never used and not needed. Our pipe is created with syscall.SOCK_CLOEXEC, so pipe will be closed once container process executed successfully, parent process will read EOF and continue. If container process got error before executed, we'll write procError to sync with parent. Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
87 lines
1.5 KiB
Go
87 lines
1.5 KiB
Go
package libcontainer
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"text/template"
|
|
"time"
|
|
|
|
"github.com/opencontainers/runc/libcontainer/stacktrace"
|
|
)
|
|
|
|
type syncType uint8
|
|
|
|
const (
|
|
procReady syncType = iota
|
|
procError
|
|
procRun
|
|
)
|
|
|
|
type syncT struct {
|
|
Type syncType `json:"type"`
|
|
}
|
|
|
|
var errorTemplate = template.Must(template.New("error").Parse(`Timestamp: {{.Timestamp}}
|
|
Code: {{.ECode}}
|
|
{{if .Message }}
|
|
Message: {{.Message}}
|
|
{{end}}
|
|
Frames:{{range $i, $frame := .Stack.Frames}}
|
|
---
|
|
{{$i}}: {{$frame.Function}}
|
|
Package: {{$frame.Package}}
|
|
File: {{$frame.File}}@{{$frame.Line}}{{end}}
|
|
`))
|
|
|
|
func newGenericError(err error, c ErrorCode) Error {
|
|
if le, ok := err.(Error); ok {
|
|
return le
|
|
}
|
|
gerr := &genericError{
|
|
Timestamp: time.Now(),
|
|
Err: err,
|
|
ECode: c,
|
|
Stack: stacktrace.Capture(1),
|
|
}
|
|
if err != nil {
|
|
gerr.Message = err.Error()
|
|
}
|
|
return gerr
|
|
}
|
|
|
|
func newSystemError(err error) Error {
|
|
if le, ok := err.(Error); ok {
|
|
return le
|
|
}
|
|
gerr := &genericError{
|
|
Timestamp: time.Now(),
|
|
Err: err,
|
|
ECode: SystemError,
|
|
Stack: stacktrace.Capture(1),
|
|
}
|
|
if err != nil {
|
|
gerr.Message = err.Error()
|
|
}
|
|
return gerr
|
|
}
|
|
|
|
type genericError struct {
|
|
Timestamp time.Time
|
|
ECode ErrorCode
|
|
Err error `json:"-"`
|
|
Message string
|
|
Stack stacktrace.Stacktrace
|
|
}
|
|
|
|
func (e *genericError) Error() string {
|
|
return fmt.Sprintf("[%d] %s: %s", e.ECode, e.ECode, e.Message)
|
|
}
|
|
|
|
func (e *genericError) Code() ErrorCode {
|
|
return e.ECode
|
|
}
|
|
|
|
func (e *genericError) Detail(w io.Writer) error {
|
|
return errorTemplate.Execute(w, e)
|
|
}
|