diff --git a/app/space.go b/app/space.go index 0ac950d8e..c8603622a 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 }