Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

install sigproxy before start/attach #17489

Merged
merged 1 commit into from
Feb 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 6 additions & 8 deletions pkg/domain/infra/abi/terminal/terminal_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,13 @@ func StartAttachCtr(ctx context.Context, ctr *libpod.Container, stdout, stderr,
streams.AttachInput = false
}

if !startContainer {
if sigProxy {
ProxySignals(ctr)
}
if sigProxy {
// To prevent a race condition, install the signal handler
// before starting/attaching to the container.
ProxySignals(ctr)
}

if !startContainer {
return ctr.Attach(streams, detachKeys, resize)
}

Expand All @@ -97,10 +99,6 @@ func StartAttachCtr(ctx context.Context, ctr *libpod.Container, stdout, stderr,
return err
}

if sigProxy {
ProxySignals(ctr)
}

if stdout == nil && stderr == nil {
fmt.Printf("%s\n", ctr.ID())
}
Expand Down
32 changes: 26 additions & 6 deletions test/system/032-sig-proxy.bats
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@
load helpers

# Command to run in each of the tests.
SLEEPLOOP='trap "echo BYE;exit 0" INT;echo READY;while :;do sleep 0.1;done'
SLEEPLOOP='trap "echo BYE;exit 0" INT;echo READY;while :;do echo RUNNING;sleep 0.1;done'

function setup() {
basic_setup

TESTLOG=$PODMAN_TMPDIR/container-stdout
}


# Main test code: wait for container to exist and be ready, send it a
# signal, wait for container to acknowledge and exit.
Expand All @@ -26,8 +33,21 @@ function _test_sigproxy() {
fi
done

# Now that container exists, wait for it to declare itself READY
wait_for_ready $cname
# Now that container exists, wait for it to declare itself RUNNING
timeout=10
while :;do
sleep 0.5
if grep -q RUNNING $TESTLOG; then
break
fi
timeout=$((timeout - 1))
if [[ $timeout -eq 0 ]]; then
run_podman ps -a
echo "log from container:"
cat $TESTLOG
die "Timed out waiting for container $cname to start"
fi
done

# Signal, and wait for container to exit
kill -INT $kidpid
Expand All @@ -52,7 +72,7 @@ function _test_sigproxy() {

@test "podman sigproxy test: run" {
# We're forced to use $PODMAN because run_podman cannot be backgrounded
$PODMAN run -i --name c_run $IMAGE sh -c "$SLEEPLOOP" &
$PODMAN run -i --name c_run $IMAGE sh -c "$SLEEPLOOP" >$TESTLOG &
local kidpid=$!

_test_sigproxy c_run $kidpid
Expand All @@ -62,7 +82,7 @@ function _test_sigproxy() {
run_podman create --name c_start $IMAGE sh -c "$SLEEPLOOP"

# See above comments regarding $PODMAN and backgrounding
$PODMAN start --attach c_start &
$PODMAN start --attach c_start >$TESTLOG &
local kidpid=$!

_test_sigproxy c_start $kidpid
Expand All @@ -72,7 +92,7 @@ function _test_sigproxy() {
run_podman run -d --name c_attach $IMAGE sh -c "$SLEEPLOOP"

# See above comments regarding $PODMAN and backgrounding
$PODMAN attach c_attach &
$PODMAN attach c_attach >$TESTLOG &
local kidpid=$!

_test_sigproxy c_attach $kidpid
Expand Down