Explorar el Código

Fix race condition in execCommandGC

`daemon.execCommandGC`
The daemon object (grep execCommandGC) iterate over a map
(grep execCommands.Commands) in a goroutine.
Lock can't protect concurrency access in this case.
Exec command storage object should return a copy of commands instead.

Signed-off-by: Pei Su <sillyousu@gmail.com>
Pei Su hace 9 años
padre
commit
e5e62b96ce
Se han modificado 1 ficheros con 7 adiciones y 1 borrados
  1. 7 1
      daemon/exec/exec.go

+ 7 - 1
daemon/exec/exec.go

@@ -53,7 +53,13 @@ func NewStore() *Store {
 
 // Commands returns the exec configurations in the store.
 func (e *Store) Commands() map[string]*Config {
-	return e.commands
+	e.RLock()
+	commands := make(map[string]*Config, len(e.commands))
+	for id, config := range e.commands {
+		commands[id] = config
+	}
+	e.RUnlock()
+	return commands
 }
 
 // Add adds a new exec configuration to the store.