From 37c16d0d98ca715f678dfd542353e183751ff20f Mon Sep 17 00:00:00 2001 From: "Jonathan Leibiusky @xetorthio" Date: Mon, 12 Jun 2017 12:59:34 -0300 Subject: [PATCH] Lock when creating new sessions as access to session map cannot happen concurrently --- pwd/pwd.go | 2 ++ pwd/session.go | 3 +++ 2 files changed, 5 insertions(+) diff --git a/pwd/pwd.go b/pwd/pwd.go index 99d5fde..6714b02 100644 --- a/pwd/pwd.go +++ b/pwd/pwd.go @@ -1,6 +1,7 @@ package pwd import ( + "sync" "time" "github.com/play-with-docker/play-with-docker/docker" @@ -23,6 +24,7 @@ var ( ) var sessions map[string]*Session +var sessionsMutex sync.Mutex func init() { prometheus.MustRegister(sessionsGauge) diff --git a/pwd/session.go b/pwd/session.go index 6114680..89d0ca2 100644 --- a/pwd/session.go +++ b/pwd/session.go @@ -52,6 +52,9 @@ type Session struct { } func (p *pwd) SessionNew(duration time.Duration, stack, stackName string) (*Session, error) { + sessionsMutex.Lock() + defer sessionsMutex.Unlock() + s := &Session{} s.Id = uuid.NewV4().String() s.Instances = map[string]*Instance{}