|
|
@ -478,6 +478,13 @@ func runUp(ctx context.Context, args []string) error {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// This whole 'up' mechanism is too complicated and results in
|
|
|
|
|
|
|
|
// hairy stuff like this select. We're ultimately waiting for
|
|
|
|
|
|
|
|
// 'startingOrRunning' to be done, but even in the case where
|
|
|
|
|
|
|
|
// it succeeds, other parts may shut down concurrently so we
|
|
|
|
|
|
|
|
// need to prioritize reads from 'startingOrRunning' if it's
|
|
|
|
|
|
|
|
// readable; its send does happen before the pump mechanism
|
|
|
|
|
|
|
|
// shuts down. (Issue 2333)
|
|
|
|
select {
|
|
|
|
select {
|
|
|
|
case <-startingOrRunning:
|
|
|
|
case <-startingOrRunning:
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
@ -489,6 +496,11 @@ func runUp(ctx context.Context, args []string) error {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return pumpCtx.Err()
|
|
|
|
return pumpCtx.Err()
|
|
|
|
case err := <-pumpErr:
|
|
|
|
case err := <-pumpErr:
|
|
|
|
|
|
|
|
select {
|
|
|
|
|
|
|
|
case <-startingOrRunning:
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
}
|
|
|
|
return err
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|