mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
libct/int: fix a data race
Fix for the following:
$ sudo go test -race -v ./libcontainer/integration/
=== RUN TestUsernsCheckpoint
==================
WARNING: DATA RACE
Write at 0x00c00019e650 by goroutine 15:
bytes.(*Buffer).ReadFrom()
/usr/lib/golang/src/bytes/buffer.go:200 +0x48
io.copyBuffer()
/usr/lib/golang/src/io/io.go:395 +0x3fe
io.Copy()
/usr/lib/golang/src/io/io.go:368 +0x7a
os/exec.(*Cmd).writerDescriptor.func1()
/usr/lib/golang/src/os/exec/exec.go:311 +0x4a
os/exec.(*Cmd).Start.func1()
/usr/lib/golang/src/os/exec/exec.go:441 +0x38
Previous write at 0x00c00019e650 by goroutine 12:
bytes.(*Buffer).ReadFrom()
/usr/lib/golang/src/bytes/buffer.go:200 +0x48
io.copyBuffer()
/usr/lib/golang/src/io/io.go:395 +0x3fe
io.Copy()
/usr/lib/golang/src/io/io.go:368 +0x7a
os/exec.(*Cmd).writerDescriptor.func1()
/usr/lib/golang/src/os/exec/exec.go:311 +0x4a
os/exec.(*Cmd).Start.func1()
/usr/lib/golang/src/os/exec/exec.go:441 +0x38
Goroutine 15 (running) created at:
os/exec.(*Cmd).Start()
/usr/lib/golang/src/os/exec/exec.go:440 +0xaaa
github.com/opencontainers/runc/libcontainer.(*linuxContainer).criuSwrk()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:1490 +0x5f7
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Restore()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:1398 +0x29ef
github.com/opencontainers/runc/libcontainer/integration.testCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:204 +0x1898
github.com/opencontainers/runc/libcontainer/integration.TestUsernsCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:48 +0x177
testing.tRunner()
/usr/lib/golang/src/testing/testing.go:1123 +0x202
Goroutine 12 (finished) created at:
os/exec.(*Cmd).Start()
/usr/lib/golang/src/os/exec/exec.go:440 +0xaaa
github.com/opencontainers/runc/libcontainer.(*initProcess).start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/process_linux.go:313 +0xda
github.com/opencontainers/runc/libcontainer.(*linuxContainer).start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:366 +0xb0
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:263 +0x27b
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Run()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:273 +0x46
github.com/opencontainers/runc/libcontainer/integration.testCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:108 +0x941
github.com/opencontainers/runc/libcontainer/integration.TestUsernsCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:48 +0x177
testing.tRunner()
/usr/lib/golang/src/testing/testing.go:1123 +0x202
==================
==================
WARNING: DATA RACE
Read at 0x00c00019e630 by goroutine 15:
bytes.(*Buffer).Len()
/usr/lib/golang/src/bytes/buffer.go:73 +0x58
bytes.(*Buffer).grow()
/usr/lib/golang/src/bytes/buffer.go:118 +0x4f
bytes.(*Buffer).ReadFrom()
/usr/lib/golang/src/bytes/buffer.go:202 +0x7c
io.copyBuffer()
/usr/lib/golang/src/io/io.go:395 +0x3fe
io.Copy()
/usr/lib/golang/src/io/io.go:368 +0x7a
os/exec.(*Cmd).writerDescriptor.func1()
/usr/lib/golang/src/os/exec/exec.go:311 +0x4a
os/exec.(*Cmd).Start.func1()
/usr/lib/golang/src/os/exec/exec.go:441 +0x38
Previous write at 0x00c00019e630 by goroutine 12:
bytes.(*Buffer).ReadFrom()
/usr/lib/golang/src/bytes/buffer.go:209 +0x1c4
io.copyBuffer()
/usr/lib/golang/src/io/io.go:395 +0x3fe
io.Copy()
/usr/lib/golang/src/io/io.go:368 +0x7a
os/exec.(*Cmd).writerDescriptor.func1()
/usr/lib/golang/src/os/exec/exec.go:311 +0x4a
os/exec.(*Cmd).Start.func1()
/usr/lib/golang/src/os/exec/exec.go:441 +0x38
Goroutine 15 (running) created at:
os/exec.(*Cmd).Start()
/usr/lib/golang/src/os/exec/exec.go:440 +0xaaa
github.com/opencontainers/runc/libcontainer.(*linuxContainer).criuSwrk()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:1490 +0x5f7
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Restore()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:1398 +0x29ef
github.com/opencontainers/runc/libcontainer/integration.testCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:204 +0x1898
github.com/opencontainers/runc/libcontainer/integration.TestUsernsCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:48 +0x177
testing.tRunner()
/usr/lib/golang/src/testing/testing.go:1123 +0x202
Goroutine 12 (finished) created at:
os/exec.(*Cmd).Start()
/usr/lib/golang/src/os/exec/exec.go:440 +0xaaa
github.com/opencontainers/runc/libcontainer.(*initProcess).start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/process_linux.go:313 +0xda
github.com/opencontainers/runc/libcontainer.(*linuxContainer).start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:366 +0xb0
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:263 +0x27b
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Run()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:273 +0x46
github.com/opencontainers/runc/libcontainer/integration.testCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:108 +0x941
github.com/opencontainers/runc/libcontainer/integration.TestUsernsCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:48 +0x177
testing.tRunner()
/usr/lib/golang/src/testing/testing.go:1123 +0x202
==================
==================
WARNING: DATA RACE
Read at 0x00c00019e648 by goroutine 15:
bytes.(*Buffer).Len()
/usr/lib/golang/src/bytes/buffer.go:73 +0x7e
bytes.(*Buffer).grow()
/usr/lib/golang/src/bytes/buffer.go:118 +0x4f
bytes.(*Buffer).ReadFrom()
/usr/lib/golang/src/bytes/buffer.go:202 +0x7c
io.copyBuffer()
/usr/lib/golang/src/io/io.go:395 +0x3fe
io.Copy()
/usr/lib/golang/src/io/io.go:368 +0x7a
os/exec.(*Cmd).writerDescriptor.func1()
/usr/lib/golang/src/os/exec/exec.go:311 +0x4a
os/exec.(*Cmd).Start.func1()
/usr/lib/golang/src/os/exec/exec.go:441 +0x38
Previous write at 0x00c00019e648 by goroutine 12:
bytes.(*Buffer).grow()
/usr/lib/golang/src/bytes/buffer.go:147 +0x2d7
bytes.(*Buffer).ReadFrom()
/usr/lib/golang/src/bytes/buffer.go:202 +0x7c
io.copyBuffer()
/usr/lib/golang/src/io/io.go:395 +0x3fe
io.Copy()
/usr/lib/golang/src/io/io.go:368 +0x7a
os/exec.(*Cmd).writerDescriptor.func1()
/usr/lib/golang/src/os/exec/exec.go:311 +0x4a
os/exec.(*Cmd).Start.func1()
/usr/lib/golang/src/os/exec/exec.go:441 +0x38
Goroutine 15 (running) created at:
os/exec.(*Cmd).Start()
/usr/lib/golang/src/os/exec/exec.go:440 +0xaaa
github.com/opencontainers/runc/libcontainer.(*linuxContainer).criuSwrk()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:1490 +0x5f7
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Restore()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:1398 +0x29ef
github.com/opencontainers/runc/libcontainer/integration.testCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:204 +0x1898
github.com/opencontainers/runc/libcontainer/integration.TestUsernsCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:48 +0x177
testing.tRunner()
/usr/lib/golang/src/testing/testing.go:1123 +0x202
Goroutine 12 (finished) created at:
os/exec.(*Cmd).Start()
/usr/lib/golang/src/os/exec/exec.go:440 +0xaaa
github.com/opencontainers/runc/libcontainer.(*initProcess).start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/process_linux.go:313 +0xda
github.com/opencontainers/runc/libcontainer.(*linuxContainer).start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:366 +0xb0
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Start()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:263 +0x27b
github.com/opencontainers/runc/libcontainer.(*linuxContainer).Run()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/container_linux.go:273 +0x46
github.com/opencontainers/runc/libcontainer/integration.testCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:108 +0x941
github.com/opencontainers/runc/libcontainer/integration.TestUsernsCheckpoint()
/home/kir/go/src/github.com/opencontainers/runc/libcontainer/integration/checkpoint_test.go:48 +0x177
testing.tRunner()
/usr/lib/golang/src/testing/testing.go:1123 +0x202
==================
testing.go:1038: race detected during execution of test
--- FAIL: TestUsernsCheckpoint (0.62s)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user