diff --git a/handlers/delete_instance.go b/handlers/delete_instance.go index 8731b68..0e195df 100644 --- a/handlers/delete_instance.go +++ b/handlers/delete_instance.go @@ -13,6 +13,8 @@ func DeleteInstance(rw http.ResponseWriter, req *http.Request) { instanceName := vars["instanceName"] s := services.GetSession(sessionId) + s.Lock() + defer s.Unlock() i := services.GetInstance(s, instanceName) err := services.DeleteInstance(s, i) if err != nil { diff --git a/handlers/new_instance.go b/handlers/new_instance.go index be44521..8e299da 100644 --- a/handlers/new_instance.go +++ b/handlers/new_instance.go @@ -16,14 +16,13 @@ func NewInstance(rw http.ResponseWriter, req *http.Request) { s := services.GetSession(sessionId) s.Lock() + defer s.Unlock() if len(s.Instances) >= 5 { - s.Unlock() rw.WriteHeader(http.StatusConflict) return } i, err := services.NewInstance(s) - s.Unlock() if err != nil { log.Println(err) //TODO: Set a status error diff --git a/services/session.go b/services/session.go index 881616c..f4cfc33 100644 --- a/services/session.go +++ b/services/session.go @@ -59,8 +59,10 @@ func NewSession() (*Session, error) { sessions[s.Id] = s // Schedule cleanup of the session - time.AfterFunc(4*time.Hour, func() { + time.AfterFunc(15*time.Second, func() { s = GetSession(s.Id) + s.Lock() + defer s.Unlock() wsServer.BroadcastTo(s.Id, "session end") log.Printf("Starting clean up of session [%s]\n", s.Id) for _, i := range s.Instances {