diff --git a/lib/main.go b/lib/main.go index e22484ca..a7445f2f 100644 --- a/lib/main.go +++ b/lib/main.go @@ -540,11 +540,11 @@ func (obj *Main) Run() error { reterr = multierr.Append(reterr, err) // list of errors } - G.Exit() // tell all the children to exit - // tell inner main loop to exit close(exitchan) + G.Exit() // tell all the children to exit, and waits for them to do so + // cleanup etcd main loop last so it can process everything first if err := EmbdEtcd.Destroy(); err != nil { // shutdown and cleanup etcd err = errwrap.Wrapf(err, "Etcd exited poorly!") @@ -555,8 +555,6 @@ func (obj *Main) Run() error { log.Printf("Main: Graph: %v", G) } - G.Wait() // wait for the graph vertex worker goroutines to exit - // TODO: wait for each vertex to exit... log.Println("Goodbye!") return reterr diff --git a/pgraph/actions.go b/pgraph/actions.go index a1a1778b..ff18bc72 100644 --- a/pgraph/actions.go +++ b/pgraph/actions.go @@ -502,11 +502,6 @@ func (g *Graph) Start(first bool) { // start or continue wg.Wait() // wait for everyone } -// Wait waits for all the graph vertex workers to exit. -func (g *Graph) Wait() { - g.wg.Wait() -} - // Pause sends pause events to the graph in a topological sort order. func (g *Graph) Pause() { log.Printf("State: %v -> %v", g.setState(graphStatePausing), g.getState()) @@ -532,4 +527,5 @@ func (g *Graph) Exit() { v.SendEvent(event.EventExit, true, false) } + g.wg.Wait() // for now, this doesn't need to be a separate Wait() method }