lxd/container_lxc.go
func (c *containerLXC) getLxcState() (lxc.State, error) {
	if c.IsSnapshot() {
		return lxc.StateMap["STOPPED"], nil
	}

	// Load the go-lxc struct
	err := c.initLXC(false)
	if err != nil {
		return lxc.StateMap["STOPPED"], err
	}

	monitor := make(chan lxc.State, 1)

	go func(c *lxc.Container) {
		monitor <- c.State()
	}(c.c)

	select {
	case state := <-monitor:
		return state, nil
	case <-time.After(5 * time.Second):
		return lxc.StateMap["FROZEN"], LxcMonitorStateError
	}
}
func (c *containerLXC) getLxcState() (lxc.State, error) {
	if c.IsSnapshot() {
		return lxc.StateMap["STOPPED"], nil
	}

	// Load the go-lxc struct
	err := c.initLXC(false)
	if err != nil {
		return lxc.StateMap["STOPPED"], err
	}

	monitor := make(chan lxc.State, 1)

	go func(c *lxc.Container) {
		monitor <- c.State()
	}(c.c)

	select {
	case state := <-monitor:
		return state, nil
	case <-time.After(5 * time.Second):
		return lxc.StateMap["FROZEN"], LxcMonitorStateError
	}
}
func ( c * containerLXC ) getLxcState ( ) ( lxc . State , error ) { if c . IsSnapshot ( ) { return lxc . StateMap [ " " ] , nil } // Load the go-lxc struct err := c . initLXC ( false ) if err != nil { return lxc . StateMap [ " " ] , err } monitor := make ( chan lxc . State , 1 ) go func ( c * lxc . Container ) { monitor <- c . State ( ) } ( c . c ) select { case state := <- monitor : return state , nil case <- time . After ( 5 * time . Second ) : return lxc . StateMap [ " " ] , LxcMonitorStateError } }
// Get lxc container state, with 1 second timeout
// If we don't get a reply, assume the lxc monitor is hung
Get lxc container state with 1 second timeout If we don t get a reply assume the lxc monitor is hung