summaryrefslogtreecommitdiffhomepage
path: root/runsc/boot/loader.go
diff options
context:
space:
mode:
Diffstat (limited to 'runsc/boot/loader.go')
-rw-r--r--runsc/boot/loader.go12
1 files changed, 7 insertions, 5 deletions
diff --git a/runsc/boot/loader.go b/runsc/boot/loader.go
index 5867eec96..9a5d649ab 100644
--- a/runsc/boot/loader.go
+++ b/runsc/boot/loader.go
@@ -142,7 +142,7 @@ func init() {
// New initializes a new kernel loader configured by spec.
// New also handles setting up a kernel for restoring a container.
-func New(spec *specs.Spec, conf *Config, controllerFD, deviceFD int, goferFDs []int, console bool) (*Loader, error) {
+func New(id string, spec *specs.Spec, conf *Config, controllerFD, deviceFD int, goferFDs []int, console bool) (*Loader, error) {
if err := usage.Init(); err != nil {
return nil, fmt.Errorf("Error setting up memory usage: %v", err)
}
@@ -286,6 +286,9 @@ func New(spec *specs.Spec, conf *Config, controllerFD, deviceFD int, goferFDs []
spec: spec,
startSignalForwarding: startSignalForwarding,
rootProcArgs: procArgs,
+ sandboxID: id,
+ containerRootTGs: make(map[string]*kernel.ThreadGroup),
+ execProcesses: make(map[execID]*kernel.ThreadGroup),
}
ctrl.manager.l = l
return l, nil
@@ -420,10 +423,9 @@ func (l *Loader) run() error {
l.rootProcArgs.FDMap.DecRef()
}
- if l.execProcesses != nil {
- return fmt.Errorf("there shouldn't already be a cache of exec'd processes, but found: %v", l.execProcesses)
- }
- l.execProcesses = make(map[execID]*kernel.ThreadGroup)
+ l.mu.Lock()
+ l.containerRootTGs[l.sandboxID] = l.k.GlobalInit()
+ l.mu.Unlock()
// Start signal forwarding only after an init process is created.
l.stopSignalForwarding = l.startSignalForwarding()