summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2020-02-23 13:25:12 -0500
committerMatthew Heon <matthew.heon@pm.me>2020-02-24 09:29:34 -0500
commit4004f646cd7a99f86b2098587c256071a89a4dc7 (patch)
tree2dd8da33094ab8cbac7012473bfccd916ad2ae4f /cmd
parent18dcb84d641f4e8ae7fa31fa446d9461e0c915ab (diff)
downloadpodman-4004f646cd7a99f86b2098587c256071a89a4dc7.tar.gz
podman-4004f646cd7a99f86b2098587c256071a89a4dc7.tar.bz2
podman-4004f646cd7a99f86b2098587c256071a89a4dc7.zip
Add basic deadlock detection for container start/remove
We can easily tell if we're going to deadlock by comparing lock IDs before actually taking the lock. Add a few checks for this in common places where deadlocks might occur. This does not yet cover pod operations, where detection is more difficult (and costly) due to the number of locks being involved being higher than 2. Also, add some error wrapping on the Podman side, so we can tell people to use `system renumber` when it occurs. Signed-off-by: Matthew Heon <matthew.heon@pm.me>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/podman/rm.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/cmd/podman/rm.go b/cmd/podman/rm.go
index e69565e95..644b0ef76 100644
--- a/cmd/podman/rm.go
+++ b/cmd/podman/rm.go
@@ -4,8 +4,10 @@ import (
"fmt"
"github.com/containers/libpod/cmd/podman/cliconfig"
+ "github.com/containers/libpod/libpod/define"
"github.com/containers/libpod/pkg/adapter"
"github.com/pkg/errors"
+ "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
@@ -77,6 +79,9 @@ func rmCmd(c *cliconfig.RmValues) error {
if len(failures) > 0 {
for _, err := range failures {
+ if errors.Cause(err) == define.ErrWillDeadlock {
+ logrus.Errorf("Potential deadlock detected - please run 'podman system renumber' to resolve")
+ }
exitCode = setExitCode(err)
}
}