Cleanup sing buffer usage

This commit is contained in:
H1JK 2023-12-15 23:45:41 +08:00 committed by yuhan6665
parent 38b175d53e
commit c01a30e8f4
6 changed files with 11 additions and 14 deletions

View file

@ -88,13 +88,13 @@ func (i *Inbound) Process(ctx context.Context, network net.Network, connection s
}
for _, buffer := range mb {
packet := B.As(buffer.Bytes()).ToOwned()
buffer.Release()
err = i.service.NewPacket(ctx, pc, packet, metadata)
if err != nil {
packet.Release()
buf.ReleaseMulti(mb)
return err
}
buffer.Release()
}
}
}

View file

@ -177,13 +177,13 @@ func (i *MultiUserInbound) Process(ctx context.Context, network net.Network, con
}
for _, buffer := range mb {
packet := B.As(buffer.Bytes()).ToOwned()
buffer.Release()
err = i.service.NewPacket(ctx, pc, packet, metadata)
if err != nil {
packet.Release()
buf.ReleaseMulti(mb)
return err
}
buffer.Release()
}
}
}

View file

@ -109,13 +109,13 @@ func (i *RelayInbound) Process(ctx context.Context, network net.Network, connect
}
for _, buffer := range mb {
packet := B.As(buffer.Bytes()).ToOwned()
buffer.Release()
err = i.service.NewPacket(ctx, pc, packet, metadata)
if err != nil {
packet.Release()
buf.ReleaseMulti(mb)
return err
}
buffer.Release()
}
}
}

View file

@ -2,7 +2,6 @@ package shadowsocks_2022
import (
"context"
"runtime"
"time"
shadowsocks "github.com/sagernet/sing-shadowsocks"
@ -102,27 +101,25 @@ func (o *Outbound) Process(ctx context.Context, link *transport.Link, dialer int
if err != nil && err != buf.ErrNotTimeoutReader && err != buf.ErrReadTimeout {
return newError("read payload").Base(err)
}
_payload := B.New()
payload := C.Dup(_payload)
defer payload.Release()
payload := B.New()
for {
payload.FullReset()
payload.Reset()
nb, n := buf.SplitBytes(mb, payload.FreeBytes())
if n > 0 {
payload.Truncate(n)
_, err = serverConn.Write(payload.Bytes())
if err != nil {
payload.Release()
return newError("write payload").Base(err)
}
handshake = true
}
if nb.IsEmpty() {
break
} else {
mb = nb
}
mb = nb
}
runtime.KeepAlive(_payload)
payload.Release()
}
if !handshake {
_, err = serverConn.Write(nil)