71 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// +build solaris
 | 
						|
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"io"
 | 
						|
	"os"
 | 
						|
	"syscall"
 | 
						|
)
 | 
						|
 | 
						|
// setPDeathSig is a no-op on Solaris as Pdeathsig is not defined.
 | 
						|
func setPDeathSig() *syscall.SysProcAttr {
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// TODO: Update to using fifo's package in openIO. Need to
 | 
						|
// 1. Merge and vendor changes in the package to use sys/unix.
 | 
						|
// 2. Figure out why context.Background is timing out.
 | 
						|
// openIO opens the pre-created fifo's for use with the container
 | 
						|
// in RDWR so that they remain open if the other side stops listening
 | 
						|
func (p *process) openIO() error {
 | 
						|
	p.stdio = &stdio{}
 | 
						|
	var (
 | 
						|
		uid = p.state.RootUID
 | 
						|
	)
 | 
						|
	i, err := p.initializeIO(uid)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	p.shimIO = i
 | 
						|
	// Both tty and non-tty mode are handled by the runtime using
 | 
						|
	// the following pipes
 | 
						|
	for name, dest := range map[string]func(f *os.File){
 | 
						|
		p.state.Stdout: func(f *os.File) {
 | 
						|
			p.Add(1)
 | 
						|
			go func() {
 | 
						|
				io.Copy(f, i.Stdout)
 | 
						|
				p.Done()
 | 
						|
			}()
 | 
						|
		},
 | 
						|
		p.state.Stderr: func(f *os.File) {
 | 
						|
			p.Add(1)
 | 
						|
			go func() {
 | 
						|
				io.Copy(f, i.Stderr)
 | 
						|
				p.Done()
 | 
						|
			}()
 | 
						|
		},
 | 
						|
	} {
 | 
						|
		f, err := os.OpenFile(name, syscall.O_RDWR, 0)
 | 
						|
		if err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
		dest(f)
 | 
						|
	}
 | 
						|
 | 
						|
	f, err := os.OpenFile(p.state.Stdin, syscall.O_RDONLY, 0)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	go func() {
 | 
						|
		io.Copy(i.Stdin, f)
 | 
						|
		i.Stdin.Close()
 | 
						|
	}()
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (p *process) killAll() error {
 | 
						|
	return nil
 | 
						|
}
 |