1
0
mirror of https://github.com/bingohuang/docker-labs.git synced 2025-07-14 01:57:32 +08:00

Better session lock management

This commit is contained in:
Jonathan Leibiusky (@xetorthio) 2016-11-11 20:10:19 -03:00
parent e49245dfe9
commit d05fe56fea
3 changed files with 6 additions and 3 deletions

View File

@ -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 {

View File

@ -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

View File

@ -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 {