diff options
author | gVisor bot <gvisor-bot@google.com> | 2021-03-15 12:16:07 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-03-15 12:16:07 -0700 |
commit | 48915d17df956a289e12f7bc81be8619ac13ea0a (patch) | |
tree | 676ff4bfb5c0cf42bca288b5570ec4546ca74e06 | |
parent | 06b047a5a8acbfc910e7e824272919d8ccd8976b (diff) | |
parent | 9b1170123d323e1f1e49bf5cf792070629d7ae09 (diff) |
Merge pull request #5618 from iangudger:unix-transport-race
PiperOrigin-RevId: 362999220
-rw-r--r-- | pkg/sentry/socket/unix/transport/unix.go | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/pkg/sentry/socket/unix/transport/unix.go b/pkg/sentry/socket/unix/transport/unix.go index 359a5995b..089a0a647 100644 --- a/pkg/sentry/socket/unix/transport/unix.go +++ b/pkg/sentry/socket/unix/transport/unix.go @@ -816,19 +816,20 @@ func (e *baseEndpoint) Connected() bool { func (e *baseEndpoint) RecvMsg(ctx context.Context, data [][]byte, creds bool, numRights int, peek bool, addr *tcpip.FullAddress) (int64, int64, ControlMessages, bool, *syserr.Error) { e.Lock() - if e.receiver == nil { + receiver := e.receiver + if receiver == nil { e.Unlock() return 0, 0, ControlMessages{}, false, syserr.ErrNotConnected } - recvLen, msgLen, cms, cmt, a, notify, err := e.receiver.Recv(ctx, data, creds, numRights, peek) + recvLen, msgLen, cms, cmt, a, notify, err := receiver.Recv(ctx, data, creds, numRights, peek) e.Unlock() if err != nil { return 0, 0, ControlMessages{}, false, err } if notify { - e.receiver.RecvNotify() + receiver.RecvNotify() } if addr != nil { @@ -850,11 +851,12 @@ func (e *baseEndpoint) SendMsg(ctx context.Context, data [][]byte, c ControlMess return 0, syserr.ErrAlreadyConnected } - n, notify, err := e.connected.Send(ctx, data, c, tcpip.FullAddress{Addr: tcpip.Address(e.path)}) + connected := e.connected + n, notify, err := connected.Send(ctx, data, c, tcpip.FullAddress{Addr: tcpip.Address(e.path)}) e.Unlock() if notify { - e.connected.SendNotify() + connected.SendNotify() } return n, err |