From ba7b214f2157fa79c696258abfa47f5bed8deae9 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Fri, 13 May 2022 22:34:52 +0200
Subject: [PATCH] fix: correct issues with running http and asynq in parallel

Signed-off-by: Janne Mareike Koschinski <janne@kuschku.de>
---
 backend/main.go  | 10 ++++++----
 shared/runner.go | 19 +++++++++++++++++++
 2 files changed, 25 insertions(+), 4 deletions(-)
 create mode 100644 shared/runner.go

diff --git a/backend/main.go b/backend/main.go
index 8a2d36f..0b3dd2b 100644
--- a/backend/main.go
+++ b/backend/main.go
@@ -53,14 +53,15 @@ func main() {
 		Handler: metricsMux,
 	}
 
-	go func() {
+	runner := shared.Runner{}
+	runner.RunParallel(func() {
 		if err := metrics.ListenAndServe(); err != nil && err != http.ErrServerClosed {
 			log.Printf("error in metrics server: %s", err.Error())
 		}
 		log.Printf("metrics shut down, shutting down asynq as well")
 		srv.Shutdown()
-	}()
-	go func() {
+	})
+	runner.RunParallel(func() {
 		if err := srv.Run(mux); err != nil {
 			log.Printf("error in asynq server: %s", err.Error())
 		}
@@ -68,5 +69,6 @@ func main() {
 		if err := metrics.Shutdown(context.Background()); err != nil {
 			log.Printf("error shutting down metrics server: %s", err.Error())
 		}
-	}()
+	})
+	runner.Wait()
 }
diff --git a/shared/runner.go b/shared/runner.go
new file mode 100644
index 0000000..1720040
--- /dev/null
+++ b/shared/runner.go
@@ -0,0 +1,19 @@
+package shared
+
+import "sync"
+
+type Runner struct {
+	wg sync.WaitGroup
+}
+
+func (runner *Runner) RunParallel(closure func()) {
+	runner.wg.Add(1)
+	go func() {
+		closure()
+		runner.wg.Done()
+	}()
+}
+
+func (runner *Runner) Wait() {
+	runner.wg.Wait()
+}
-- 
GitLab