Make sure the metrics goroutine is scheduled

Wait for the goroutine to be scheduled before exiting. We don't wait for
the metrics event to be sent, we only make sure the goroutine is called.
This commit is contained in:
Djordje Lukic 2020-07-03 12:17:14 +02:00
parent ae76e0cf27
commit 159b9d0cfb
1 changed files with 6 additions and 0 deletions

View File

@ -52,12 +52,17 @@ var managementCommands = []string{
// Track sends the tracking analytics to Docker Desktop // Track sends the tracking analytics to Docker Desktop
func Track(context string, args []string, flags *flag.FlagSet) { func Track(context string, args []string, flags *flag.FlagSet) {
wasIn := make(chan bool)
// Fire and forget, we don't want to slow down the user waiting for DD // Fire and forget, we don't want to slow down the user waiting for DD
// metrics endpoint to respond. We could lose some events but that's ok. // metrics endpoint to respond. We could lose some events but that's ok.
go func() { go func() {
defer func() { defer func() {
_ = recover() _ = recover()
}() }()
wasIn <- true
command := getCommand(args, flags) command := getCommand(args, flags)
if command != "" { if command != "" {
c := NewClient() c := NewClient()
@ -67,6 +72,7 @@ func Track(context string, args []string, flags *flag.FlagSet) {
}) })
} }
}() }()
<-wasIn
} }
func getCommand(args []string, flags *flag.FlagSet) string { func getCommand(args []string, flags *flag.FlagSet) string {