mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Merge pull request #10990 from ignoramous:patch-5
PiperOrigin-RevId: 683708561
This commit is contained in:
@@ -160,11 +160,16 @@ func (e *endpoint) Abort() {
|
||||
// associated with it.
|
||||
func (e *endpoint) Close() {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
e.closeLocked()
|
||||
}
|
||||
|
||||
// Preconditions: e.mu is locked.
|
||||
// +checklocks:e.mu
|
||||
func (e *endpoint) closeLocked() {
|
||||
switch state := e.net.State(); state {
|
||||
case transport.DatagramEndpointStateInitial:
|
||||
case transport.DatagramEndpointStateClosed:
|
||||
e.mu.Unlock()
|
||||
return
|
||||
case transport.DatagramEndpointStateBound, transport.DatagramEndpointStateConnected:
|
||||
id := e.net.Info().ID
|
||||
@@ -201,7 +206,6 @@ func (e *endpoint) Close() {
|
||||
e.net.Shutdown()
|
||||
e.net.Close()
|
||||
e.readShutdown = true
|
||||
e.mu.Unlock()
|
||||
|
||||
e.waiterQueue.Notify(waiter.EventHUp | waiter.EventErr | waiter.ReadableEvents | waiter.WritableEvents)
|
||||
}
|
||||
|
||||
@@ -76,15 +76,17 @@ func (r *ForwarderRequest) CreateEndpoint(queue *waiter.Queue) (tcpip.Endpoint,
|
||||
|
||||
netHdr := r.pkt.Network()
|
||||
if err := ep.net.Bind(tcpip.FullAddress{NIC: r.pkt.NICID, Addr: netHdr.DestinationAddress(), Port: r.id.LocalPort}); err != nil {
|
||||
ep.closeLocked()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := ep.net.Connect(tcpip.FullAddress{NIC: r.pkt.NICID, Addr: netHdr.SourceAddress(), Port: r.id.RemotePort}); err != nil {
|
||||
ep.closeLocked()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := r.stack.RegisterTransportEndpoint([]tcpip.NetworkProtocolNumber{r.pkt.NetworkProtocolNumber}, ProtocolNumber, r.id, ep, ep.portFlags, tcpip.NICID(ep.ops.GetBindToDevice())); err != nil {
|
||||
ep.Close()
|
||||
ep.closeLocked()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user