Review comments

This commit is contained in:
Dustin Spicuzza
2021-06-15 00:53:33 -04:00
parent 0df31ce3fd
commit 4aa662b50b
3 changed files with 67 additions and 52 deletions

64
unix/shm_test.go Normal file
View File

@@ -0,0 +1,64 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build darwin
// +build darwin
package unix_test
import (
"testing"
"golang.org/x/sys/unix"
)
func TestSysvSharedMemory(t *testing.T) {
// create ipc
id, err := unix.SysvShmGet(unix.IPC_PRIVATE, 1024, unix.IPC_CREAT|unix.IPC_EXCL|0o600)
if err != nil {
t.Fatalf("SysvShmGet: %v", err)
}
defer func() {
_, err := unix.SysvShmCtl(id, unix.IPC_RMID, nil)
if err != nil {
t.Errorf("Remove failed: %v", err)
}
}()
// attach
b1, err := unix.SysvShmAttach(id, 0, 0)
if err != nil {
t.Fatalf("Attach: %v", err)
}
if len(b1) != 1024 {
t.Fatalf("b1 len = %v, want 1024", len(b1))
}
b1[42] = 'x'
// attach again
b2, err := unix.SysvShmAttach(id, 0, 0)
if err != nil {
t.Fatalf("Attach: %v", err)
}
if len(b2) != 1024 {
t.Fatalf("b2 len = %v, want 1024", len(b1))
}
b2[43] = 'y'
if b2[42] != 'x' || b1[43] != 'y' {
t.Fatalf("shared memory isn't shared")
}
// detach
if err = unix.SysvShmDetach(b2); err != nil {
t.Fatalf("Detach: %v", err)
}
if b1[42] != 'x' || b1[43] != 'y' {
t.Fatalf("shared memory was invalidated")
}
}

View File

@@ -447,8 +447,9 @@ func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) {
_, err := SysvShmCtl(id, IPC_STAT, &info)
if err != nil {
// release the shared memory if we can't find the size; ignoring error
// here since there's nothing sensible we can return here
// release the shared memory if we can't find the size
// ignoring error from shmdt as there's nothing sensible to return here
shmdt(addr)
return nil, err
}

View File

@@ -852,56 +852,6 @@ func TestRenameat(t *testing.T) {
}
}
func TestSysvSharedMemory(t *testing.T) {
// create ipc
id, err := unix.SysvShmGet(unix.IPC_PRIVATE, 1024, unix.IPC_CREAT|unix.IPC_EXCL|0o600)
if err != nil {
t.Fatalf("SysvShmGet: %v", err)
}
defer func() {
_, err := unix.SysvShmCtl(id, unix.IPC_RMID, nil)
if err != nil {
t.Errorf("Remove failed: %v", err)
}
}()
// attach
b1, err := unix.SysvShmAttach(id, 0, 0)
if err != nil {
t.Fatalf("Attach: %v", err)
}
if len(b1) != 1024 {
t.Fatalf("b1 len = %v, want 1024", len(b1))
}
b1[42] = 'x'
// attach again
b2, err := unix.SysvShmAttach(id, 0, 0)
if err != nil {
t.Fatalf("Attach: %v", err)
}
if len(b2) != 1024 {
t.Fatalf("b2 len = %v, want 1024", len(b1))
}
b2[43] = 'y'
if b2[42] != 'x' || b1[43] != 'y' {
t.Fatalf("shared memory isn't shared")
}
// detach
if err = unix.SysvShmDetach(b2); err != nil {
t.Fatalf("Detach: %v", err)
}
if b1[42] != 'x' || b1[43] != 'y' {
t.Fatalf("shared memory was invalidated")
}
}
func TestUtimesNanoAt(t *testing.T) {
defer chtmpdir(t)()