mirror of
https://github.com/openziti/ziti.git
synced 2026-10-12 15:28:05 +00:00
Fix missing memory pool buffer returns. Fixes #1045
This commit is contained in:
@@ -310,16 +310,19 @@ func (event *udpReadEvent) Handle(manager udp_vconn.Manager) error {
|
||||
log := pfxlog.Logger()
|
||||
origDest, err := getOriginalDest(event.oob)
|
||||
if err != nil {
|
||||
event.buf.Release()
|
||||
return fmt.Errorf("error while getting original destination packet: %v", err)
|
||||
}
|
||||
log.Infof("received datagram from %v (original dest %v). Creating udp listen socket on original dest", event.srcAddr, origDest)
|
||||
packetConn, err := listenConfig.ListenPacket(context.Background(), "udp", origDest.String())
|
||||
if err != nil {
|
||||
event.buf.Release()
|
||||
return err
|
||||
}
|
||||
writeConn := packetConn.(*net.UDPConn)
|
||||
writeQueue, err = manager.CreateWriteQueue(origDest, event.srcAddr, event.interceptor.service, writeConn)
|
||||
if err != nil {
|
||||
event.buf.Release()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ func (u UnpooledBuffer) Release() {
|
||||
|
||||
func NewManager(provider tunnel.FabricProvider, newConnPolicy NewConnPolicy, expirationPolicy ConnExpirationPolicy) Manager {
|
||||
manager := &manager{
|
||||
eventC: make(chan Event),
|
||||
eventC: make(chan Event, 4),
|
||||
provider: provider,
|
||||
connMap: make(map[string]*udpConn),
|
||||
newConnPolicy: newConnPolicy,
|
||||
|
||||
@@ -75,14 +75,17 @@ func (conn *udpConn) WriteTo(w io.Writer) (n int64, err error) {
|
||||
var bytesWritten int64
|
||||
for {
|
||||
var buf mempool.PooledBuffer
|
||||
var ok bool
|
||||
|
||||
select {
|
||||
case buf, ok = <-conn.readC:
|
||||
case buf = <-conn.readC:
|
||||
case <-conn.closeNotify:
|
||||
select {
|
||||
case buf = <-conn.readC:
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
if !ok {
|
||||
if buf == nil {
|
||||
return bytesWritten, io.EOF
|
||||
}
|
||||
|
||||
@@ -123,6 +126,10 @@ func (conn *udpConn) Read(b []byte) (n int, err error) {
|
||||
select {
|
||||
case buf = <-conn.readC:
|
||||
case <-conn.closeNotify:
|
||||
select {
|
||||
case buf = <-conn.readC:
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
if buf == nil {
|
||||
|
||||
@@ -89,7 +89,7 @@ func (manager *manager) CreateWriteQueue(targetAddr *net.UDPAddr, srcAddr net.Ad
|
||||
return nil, errors.New("max connections exceeded")
|
||||
}
|
||||
conn := &udpConn{
|
||||
readC: make(chan mempool.PooledBuffer),
|
||||
readC: make(chan mempool.PooledBuffer, 4),
|
||||
closeNotify: make(chan struct{}),
|
||||
service: service.Name,
|
||||
srcAddr: srcAddr,
|
||||
|
||||
Reference in New Issue
Block a user