Skip to content

Commit 0984264

Browse files
committed
internal/poll: remove msg field from Windows' poll.operation
There is no need to keep the msg field in the poll.operation struct. This skims down the size of os.File by 112 bytes. Change-Id: I5c7b1f3989f9bb5f1748df2cba8128d9c479b35d Reviewed-on: https://go-review.googlesource.com/c/go/+/685418 LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Damien Neil <[email protected]> Reviewed-by: Mark Freeman <[email protected]>
1 parent d7b4114 commit 0984264

File tree

1 file changed

+43
-51
lines changed

1 file changed

+43
-51
lines changed

src/internal/poll/fd_windows.go

Lines changed: 43 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ type operation struct {
7878

7979
// fields used only by net package
8080
buf syscall.WSABuf
81-
msg windows.WSAMsg
8281
rsa *syscall.RawSockaddrAny
8382
bufs []syscall.WSABuf
8483
}
@@ -112,10 +111,7 @@ func (fd *FD) overlapped(o *operation) *syscall.Overlapped {
112111

113112
func (o *operation) InitBuf(buf []byte) {
114113
o.buf.Len = uint32(len(buf))
115-
o.buf.Buf = nil
116-
if len(buf) != 0 {
117-
o.buf.Buf = &buf[0]
118-
}
114+
o.buf.Buf = unsafe.SliceData(buf)
119115
}
120116

121117
func (o *operation) InitBufs(buf *[][]byte) {
@@ -148,19 +144,18 @@ func (o *operation) ClearBufs() {
148144
o.bufs = o.bufs[:0]
149145
}
150146

151-
func (o *operation) InitMsg(p []byte, oob []byte) {
152-
o.InitBuf(p)
153-
o.msg.Buffers = &o.buf
154-
o.msg.BufferCount = 1
155-
156-
o.msg.Name = nil
157-
o.msg.Namelen = 0
158-
159-
o.msg.Flags = 0
160-
o.msg.Control.Len = uint32(len(oob))
161-
o.msg.Control.Buf = nil
162-
if len(oob) != 0 {
163-
o.msg.Control.Buf = &oob[0]
147+
func newWSAMsg(p []byte, oob []byte, flags int) windows.WSAMsg {
148+
return windows.WSAMsg{
149+
Buffers: &syscall.WSABuf{
150+
Len: uint32(len(p)),
151+
Buf: unsafe.SliceData(p),
152+
},
153+
BufferCount: 1,
154+
Control: syscall.WSABuf{
155+
Len: uint32(len(oob)),
156+
Buf: unsafe.SliceData(oob),
157+
},
158+
Flags: uint32(flags),
164159
}
165160
}
166161

@@ -1279,23 +1274,22 @@ func (fd *FD) ReadMsg(p []byte, oob []byte, flags int) (int, int, int, syscall.S
12791274
}
12801275

12811276
o := &fd.rop
1282-
o.InitMsg(p, oob)
12831277
if o.rsa == nil {
12841278
o.rsa = new(syscall.RawSockaddrAny)
12851279
}
1286-
o.msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1287-
o.msg.Namelen = int32(unsafe.Sizeof(*o.rsa))
1288-
o.msg.Flags = uint32(flags)
1280+
msg := newWSAMsg(p, oob, flags)
1281+
msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1282+
msg.Namelen = int32(unsafe.Sizeof(*o.rsa))
12891283
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
1290-
err = windows.WSARecvMsg(fd.Sysfd, &o.msg, &qty, &o.o, nil)
1284+
err = windows.WSARecvMsg(fd.Sysfd, &msg, &qty, &o.o, nil)
12911285
return qty, err
12921286
})
12931287
err = fd.eofError(n, err)
12941288
var sa syscall.Sockaddr
12951289
if err == nil {
12961290
sa, err = o.rsa.Sockaddr()
12971291
}
1298-
return n, int(o.msg.Control.Len), int(o.msg.Flags), sa, err
1292+
return n, int(msg.Control.Len), int(msg.Flags), sa, err
12991293
}
13001294

13011295
// ReadMsgInet4 is ReadMsg, but specialized to return a syscall.SockaddrInet4.
@@ -1310,22 +1304,21 @@ func (fd *FD) ReadMsgInet4(p []byte, oob []byte, flags int, sa4 *syscall.Sockadd
13101304
}
13111305

13121306
o := &fd.rop
1313-
o.InitMsg(p, oob)
13141307
if o.rsa == nil {
13151308
o.rsa = new(syscall.RawSockaddrAny)
13161309
}
1317-
o.msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1318-
o.msg.Namelen = int32(unsafe.Sizeof(*o.rsa))
1319-
o.msg.Flags = uint32(flags)
1310+
msg := newWSAMsg(p, oob, flags)
1311+
msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1312+
msg.Namelen = int32(unsafe.Sizeof(*o.rsa))
13201313
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
1321-
err = windows.WSARecvMsg(fd.Sysfd, &o.msg, &qty, &o.o, nil)
1314+
err = windows.WSARecvMsg(fd.Sysfd, &msg, &qty, &o.o, nil)
13221315
return qty, err
13231316
})
13241317
err = fd.eofError(n, err)
13251318
if err == nil {
13261319
rawToSockaddrInet4(o.rsa, sa4)
13271320
}
1328-
return n, int(o.msg.Control.Len), int(o.msg.Flags), err
1321+
return n, int(msg.Control.Len), int(msg.Flags), err
13291322
}
13301323

13311324
// ReadMsgInet6 is ReadMsg, but specialized to return a syscall.SockaddrInet6.
@@ -1340,22 +1333,21 @@ func (fd *FD) ReadMsgInet6(p []byte, oob []byte, flags int, sa6 *syscall.Sockadd
13401333
}
13411334

13421335
o := &fd.rop
1343-
o.InitMsg(p, oob)
13441336
if o.rsa == nil {
13451337
o.rsa = new(syscall.RawSockaddrAny)
13461338
}
1347-
o.msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1348-
o.msg.Namelen = int32(unsafe.Sizeof(*o.rsa))
1349-
o.msg.Flags = uint32(flags)
1339+
msg := newWSAMsg(p, oob, flags)
1340+
msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1341+
msg.Namelen = int32(unsafe.Sizeof(*o.rsa))
13501342
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
1351-
err = windows.WSARecvMsg(fd.Sysfd, &o.msg, &qty, &o.o, nil)
1343+
err = windows.WSARecvMsg(fd.Sysfd, &msg, &qty, &o.o, nil)
13521344
return qty, err
13531345
})
13541346
err = fd.eofError(n, err)
13551347
if err == nil {
13561348
rawToSockaddrInet6(o.rsa, sa6)
13571349
}
1358-
return n, int(o.msg.Control.Len), int(o.msg.Flags), err
1350+
return n, int(msg.Control.Len), int(msg.Flags), err
13591351
}
13601352

13611353
// WriteMsg wraps the WSASendMsg network call.
@@ -1370,7 +1362,7 @@ func (fd *FD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (int, int, err
13701362
defer fd.writeUnlock()
13711363

13721364
o := &fd.wop
1373-
o.InitMsg(p, oob)
1365+
msg := newWSAMsg(p, oob, 0)
13741366
if sa != nil {
13751367
if o.rsa == nil {
13761368
o.rsa = new(syscall.RawSockaddrAny)
@@ -1379,14 +1371,14 @@ func (fd *FD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (int, int, err
13791371
if err != nil {
13801372
return 0, 0, err
13811373
}
1382-
o.msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1383-
o.msg.Namelen = len
1374+
msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1375+
msg.Namelen = len
13841376
}
13851377
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
1386-
err = windows.WSASendMsg(fd.Sysfd, &o.msg, 0, nil, &o.o, nil)
1378+
err = windows.WSASendMsg(fd.Sysfd, &msg, 0, nil, &o.o, nil)
13871379
return qty, err
13881380
})
1389-
return n, int(o.msg.Control.Len), err
1381+
return n, int(msg.Control.Len), err
13901382
}
13911383

13921384
// WriteMsgInet4 is WriteMsg specialized for syscall.SockaddrInet4.
@@ -1401,18 +1393,18 @@ func (fd *FD) WriteMsgInet4(p []byte, oob []byte, sa *syscall.SockaddrInet4) (in
14011393
defer fd.writeUnlock()
14021394

14031395
o := &fd.wop
1404-
o.InitMsg(p, oob)
14051396
if o.rsa == nil {
14061397
o.rsa = new(syscall.RawSockaddrAny)
14071398
}
14081399
len := sockaddrInet4ToRaw(o.rsa, sa)
1409-
o.msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1410-
o.msg.Namelen = len
1400+
msg := newWSAMsg(p, oob, 0)
1401+
msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1402+
msg.Namelen = len
14111403
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
1412-
err = windows.WSASendMsg(fd.Sysfd, &o.msg, 0, nil, &o.o, nil)
1404+
err = windows.WSASendMsg(fd.Sysfd, &msg, 0, nil, &o.o, nil)
14131405
return qty, err
14141406
})
1415-
return n, int(o.msg.Control.Len), err
1407+
return n, int(msg.Control.Len), err
14161408
}
14171409

14181410
// WriteMsgInet6 is WriteMsg specialized for syscall.SockaddrInet6.
@@ -1427,18 +1419,18 @@ func (fd *FD) WriteMsgInet6(p []byte, oob []byte, sa *syscall.SockaddrInet6) (in
14271419
defer fd.writeUnlock()
14281420

14291421
o := &fd.wop
1430-
o.InitMsg(p, oob)
14311422
if o.rsa == nil {
14321423
o.rsa = new(syscall.RawSockaddrAny)
14331424
}
1425+
msg := newWSAMsg(p, oob, 0)
14341426
len := sockaddrInet6ToRaw(o.rsa, sa)
1435-
o.msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1436-
o.msg.Namelen = len
1427+
msg.Name = (syscall.Pointer)(unsafe.Pointer(o.rsa))
1428+
msg.Namelen = len
14371429
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
1438-
err = windows.WSASendMsg(fd.Sysfd, &o.msg, 0, nil, &o.o, nil)
1430+
err = windows.WSASendMsg(fd.Sysfd, &msg, 0, nil, &o.o, nil)
14391431
return qty, err
14401432
})
1441-
return n, int(o.msg.Control.Len), err
1433+
return n, int(msg.Control.Len), err
14421434
}
14431435

14441436
func DupCloseOnExec(fd int) (int, string, error) {

0 commit comments

Comments
 (0)