Skip to content

Commit 22de029

Browse files
committed
fix test & test for mremap
1 parent 6a2d8a9 commit 22de029

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

unix/mremap_linux_test.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,50 @@ import (
1313
)
1414

1515
func TestMremap(t *testing.T) {
16+
b, err := unix.Mmap(-1, 0, unix.Getpagesize()*2, unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE)
17+
if err != nil {
18+
t.Fatalf("Mmap: %v", err)
19+
}
20+
if err := unix.Mprotect(b, unix.PROT_READ|unix.PROT_WRITE); err != nil {
21+
t.Fatalf("Mprotect: %v", err)
22+
}
23+
24+
b[0] = 42
25+
if err := unix.Msync(b, unix.MS_SYNC); err != nil {
26+
t.Fatalf("Msync: %v", err)
27+
}
28+
29+
bNew, err := unix.Mmap(-1, int64(unix.Getpagesize()*4), unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE)
30+
if err != nil {
31+
t.Fatalf("Mmap: %v", err)
32+
}
1633

34+
bRemapped, err := unix.Mremap(b, bNew, 0)
35+
if err != nil {
36+
t.Fatalf("Mremap: %v", err)
37+
}
38+
if &bRemapped[0] != &bNew[0] {
39+
t.Fatal("bNew and bRemapped start at different pointers")
40+
}
41+
if bRemapped[0] != 42 {
42+
t.Fatal("first element wasn't mapped")
43+
}
44+
if len(bNew) != len(bRemapped) {
45+
t.Fatal("bNew len doesn't equal bRemapped len")
46+
}
47+
if cap(bNew) != cap(bRemapped) {
48+
t.Fatal("bNew cap doesn't equal bRemapped len")
49+
}
1750
}
1851

1952
func TestMremap2(t *testing.T) {
2053
b, err := unix.Mmap(-1, 0, unix.Getpagesize()*2, unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE)
2154
if err != nil {
2255
t.Fatalf("Mmap: %v", err)
2356
}
57+
if err := unix.Mprotect(b, unix.PROT_READ|unix.PROT_WRITE); err != nil {
58+
t.Fatalf("Mprotect: %v", err)
59+
}
2460

2561
b[0] = 42
2662
if err := unix.Msync(b, unix.MS_SYNC); err != nil {
@@ -36,6 +72,9 @@ func TestMremap2(t *testing.T) {
3672
t.Fatal("first element value was changed")
3773
}
3874
if len(bNew) != unix.Getpagesize() {
39-
t.Fatal("first ")
75+
t.Fatal("new memory len not equal to specified len")
76+
}
77+
if cap(bNew) != unix.Getpagesize() {
78+
t.Fatal("new memory cap not equal to specified len")
4079
}
4180
}

unix/syscall_unix.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ func (m *mmapper) Mremap(oldData []byte, newData []byte, flags int) (data []byte
152152
if len(oldData) == 0 || len(oldData) != cap(oldData) || len(newData) == 0 || len(newData) != cap(newData) {
153153
return nil, EINVAL
154154
}
155+
flags |= MREMAP_MAYMOVE | MREMAP_FIXED
155156

156157
pOld := &oldData[cap(oldData)-1]
157158
m.Lock()

0 commit comments

Comments
 (0)