From 54f98fe11b40d9eaa3c29e063f9e4d2aacfc64fb Mon Sep 17 00:00:00 2001 From: v2ray Date: Sun, 22 May 2016 19:32:28 +0200 Subject: [PATCH] more clear logic of space initialization --- app/space.go | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/app/space.go b/app/space.go index 0ac950d8..c8603622 100644 --- a/app/space.go +++ b/app/space.go @@ -2,7 +2,6 @@ package app import ( "errors" - "sync/atomic" "github.com/v2ray/v2ray-core/common" ) @@ -40,40 +39,27 @@ type Space interface { } type spaceImpl struct { - cache map[ID]Application - initSignal chan struct{} - initErrors chan error - appsToInit int32 - appsDone int32 + cache map[ID]Application + appInit []ApplicationInitializer } func NewSpace() Space { return &spaceImpl{ - cache: make(map[ID]Application), - initSignal: make(chan struct{}), - initErrors: make(chan error, 1), + cache: make(map[ID]Application), + appInit: make([]ApplicationInitializer, 0, 32), } } func (this *spaceImpl) InitializeApplication(f ApplicationInitializer) { - atomic.AddInt32(&(this.appsToInit), 1) - go func() { - <-this.initSignal - err := f() - if err != nil { - this.initErrors <- err - } - count := atomic.AddInt32(&(this.appsDone), 1) - if count == this.appsToInit { - close(this.initErrors) - } - }() + this.appInit = append(this.appInit, f) } func (this *spaceImpl) Initialize() error { - close(this.initSignal) - if err, open := <-this.initErrors; open { - return err + for _, f := range this.appInit { + err := f() + if err != nil { + return err + } } return nil }