Shut down libpod runtime's store if error occurs in NewRuntime
Signed-off-by: Matthew Heon <mheon@redhat.com>
This commit is contained in:
parent
97ad00b708
commit
90b44cbf34
1 changed files with 15 additions and 4 deletions
|
@ -8,6 +8,7 @@ import (
|
||||||
"github.com/containers/image/types"
|
"github.com/containers/image/types"
|
||||||
"github.com/containers/storage"
|
"github.com/containers/storage"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/ulule/deepcopier"
|
"github.com/ulule/deepcopier"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -68,8 +69,8 @@ var (
|
||||||
|
|
||||||
// NewRuntime creates a new container runtime
|
// NewRuntime creates a new container runtime
|
||||||
// Options can be passed to override the default configuration for the runtime
|
// Options can be passed to override the default configuration for the runtime
|
||||||
func NewRuntime(options ...RuntimeOption) (*Runtime, error) {
|
func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) {
|
||||||
runtime := new(Runtime)
|
runtime = new(Runtime)
|
||||||
runtime.config = new(RuntimeConfig)
|
runtime.config = new(RuntimeConfig)
|
||||||
|
|
||||||
// Copy the default configuration
|
// Copy the default configuration
|
||||||
|
@ -89,9 +90,19 @@ func NewRuntime(options ...RuntimeOption) (*Runtime, error) {
|
||||||
}
|
}
|
||||||
runtime.store = store
|
runtime.store = store
|
||||||
is.Transport.SetStore(store)
|
is.Transport.SetStore(store)
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
// Don't forcibly shut down
|
||||||
|
// We could be opening a store in use by another libpod
|
||||||
|
_, err2 := runtime.store.Shutdown(false)
|
||||||
|
if err2 != nil {
|
||||||
|
logrus.Errorf("Error removing store for partially-created runtime: %s", err2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
// TODO remove StorageImageServer and make its functions work directly
|
// Set up a storage service for creating container root filesystems from
|
||||||
// on Runtime (or convert to something that satisfies an image)
|
// images
|
||||||
storageService, err := getStorageService(runtime.store)
|
storageService, err := getStorageService(runtime.store)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
Loading…
Reference in a new issue