diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b59edd654..53d0d74c3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,6 +21,7 @@ jobs: matrix: go-version: [1.14.x, 1.15.x, 1.16.x] rootless: ["rootless", ""] + race: ["-race", ""] steps: @@ -41,7 +42,7 @@ jobs: go-version: ${{ matrix.go-version }} - name: build - run: sudo -E PATH="$PATH" make all + run: sudo -E PATH="$PATH" make EXTRA_FLAGS="${{ matrix.race }}" all - name: install bats uses: mig4/setup-bats@v1 @@ -50,7 +51,7 @@ jobs: - name: unit test if: matrix.rootless != 'rootless' - run: sudo -E PATH="$PATH" -- make localunittest + run: sudo -E PATH="$PATH" -- make TESTFLAGS="${{ matrix.race }}" localunittest - name: add rootless user if: matrix.rootless == 'rootless' diff --git a/Makefile b/Makefile index e13d8f1d4..bb5c17c94 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,9 @@ ifneq ($(GO111MODULE),off) endif ifeq ($(shell $(GO) env GOOS),linux) ifeq (,$(filter $(shell $(GO) env GOARCH),mips mipsle mips64 mips64le ppc64)) - GO_BUILDMODE := "-buildmode=pie" + ifeq (,$(findstring -race,$(EXTRA_FLAGS))) + GO_BUILDMODE := "-buildmode=pie" + endif endif endif GO_BUILD := $(GO) build -trimpath $(MOD_VENDOR) $(GO_BUILDMODE) $(EXTRA_FLAGS) -tags "$(BUILDTAGS)" \ diff --git a/libcontainer/configs/config.go b/libcontainer/configs/config.go index e1cd16265..3808f79a8 100644 --- a/libcontainer/configs/config.go +++ b/libcontainer/configs/config.go @@ -387,7 +387,7 @@ func (c Command) Run(s *specs.State) error { return err case <-timerCh: cmd.Process.Kill() - cmd.Wait() + <-errC return fmt.Errorf("hook ran past specified timeout of %.1fs", c.Timeout.Seconds()) } } diff --git a/libcontainer/integration/checkpoint_test.go b/libcontainer/integration/checkpoint_test.go index 627a013f2..cecf0b547 100644 --- a/libcontainer/integration/checkpoint_test.go +++ b/libcontainer/integration/checkpoint_test.go @@ -194,10 +194,11 @@ func testCheckpoint(t *testing.T, userns bool) { t.Fatal(err) } + var restoreStdout bytes.Buffer restoreProcessConfig := &libcontainer.Process{ Cwd: "/", Stdin: restoreStdinR, - Stdout: &stdout, + Stdout: &restoreStdout, Init: true, } @@ -242,7 +243,7 @@ func testCheckpoint(t *testing.T, userns bool) { t.Fatal(s.String(), pid) } - output := stdout.String() + output := restoreStdout.String() if !strings.Contains(output, "Hello!") { t.Fatal("Did not restore the pipe correctly:", output) }