소스 검색

Moved resetLock() to the Load() method ; changed resetLock() to initLock() and changed behavior to not modify the lock if it was already set (not nil)

shin- 12 년 전
부모
커밋
d1767bbf67
3개의 변경된 파일6개의 추가작업 그리고 4개의 파일을 삭제
  1. 0 1
      container.go
  2. 1 0
      runtime.go
  3. 5 3
      state.go

+ 0 - 1
container.go

@@ -127,7 +127,6 @@ func (container *Container) FromDisk() error {
 	if err := json.Unmarshal(data, container); err != nil {
 	if err := json.Unmarshal(data, container); err != nil {
 		return err
 		return err
 	}
 	}
-	container.State.resetLock()
 	return nil
 	return nil
 }
 }
 
 

+ 1 - 0
runtime.go

@@ -117,6 +117,7 @@ func (runtime *Runtime) Load(id string) (*Container, error) {
 	if err := container.FromDisk(); err != nil {
 	if err := container.FromDisk(); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
+	container.State.initLock()
 	if container.Id != id {
 	if container.Id != id {
 		return container, fmt.Errorf("Container %s is stored at %s", container.Id, id)
 		return container, fmt.Errorf("Container %s is stored at %s", container.Id, id)
 	}
 	}

+ 5 - 3
state.go

@@ -39,9 +39,11 @@ func (s *State) setStopped(exitCode int) {
 	s.broadcast()
 	s.broadcast()
 }
 }
 
 
-func (s *State) resetLock() {
-	s.stateChangeLock = &sync.Mutex{}
-	s.stateChangeCond = sync.NewCond(s.stateChangeLock)
+func (s *State) initLock() {
+	if s.stateChangeLock == nil {
+		s.stateChangeLock = &sync.Mutex{}
+		s.stateChangeCond = sync.NewCond(s.stateChangeLock)
+	}
 }
 }
 
 
 func (s *State) broadcast() {
 func (s *State) broadcast() {