etcdmain/etcd.go
func startEtcd(cfg *embed.Config) (<-chan struct{}, <-chan error, error) {
	e, err := embed.StartEtcd(cfg)
	if err != nil {
		return nil, nil, err
	}
	osutil.RegisterInterruptHandler(e.Close)
	select {
	case <-e.Server.ReadyNotify(): // wait for e.Server to join the cluster
	case <-e.Server.StopNotify(): // publish aborted from 'ErrStopped'
	}
	return e.Server.StopNotify(), e.Err(), nil
}
func startEtcd(cfg *embed.Config) (<-chan struct{}, <-chan error, error) {
	e, err := embed.StartEtcd(cfg)
	if err != nil {
		return nil, nil, err
	}
	osutil.RegisterInterruptHandler(e.Close)
	select {
	case <-e.Server.ReadyNotify(): // wait for e.Server to join the cluster
	case <-e.Server.StopNotify(): // publish aborted from 'ErrStopped'
	}
	return e.Server.StopNotify(), e.Err(), nil
}
func startEtcd ( cfg * embed . Config ) ( <- chan struct { } , <- chan error , error ) { e , err := embed . StartEtcd ( cfg ) if err != nil { return nil , nil , err } osutil . RegisterInterruptHandler ( e . Close ) select { case <- e . Server . ReadyNotify ( ) : // wait for e.Server to join the cluster case <- e . Server . StopNotify ( ) : // publish aborted from 'ErrStopped' } return e . Server . StopNotify ( ) , e . Err ( ) , nil }
// startEtcd runs StartEtcd in addition to hooks needed for standalone etcd.
startEtcd runs StartEtcd in addition to hooks needed for standalone etcd .