mirror of
https://github.com/fosrl/gerbil.git
synced 2026-02-07 21:46:40 +00:00
Try to fix mem leak
This commit is contained in:
@@ -758,14 +758,20 @@ func (p *SNIProxy) pipe(clientConn, targetConn net.Conn, clientReader io.Reader)
|
|||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
wg.Add(2)
|
wg.Add(2)
|
||||||
|
|
||||||
|
// closeOnce ensures we only close connections once
|
||||||
|
var closeOnce sync.Once
|
||||||
|
closeConns := func() {
|
||||||
|
closeOnce.Do(func() {
|
||||||
|
// Close both connections to unblock any pending reads
|
||||||
|
clientConn.Close()
|
||||||
|
targetConn.Close()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Copy data from client to target (using the buffered reader)
|
// Copy data from client to target (using the buffered reader)
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
defer func() {
|
defer closeConns()
|
||||||
if tcpConn, ok := targetConn.(*net.TCPConn); ok {
|
|
||||||
tcpConn.CloseWrite()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
// Use a large buffer for better performance
|
// Use a large buffer for better performance
|
||||||
buf := make([]byte, 32*1024)
|
buf := make([]byte, 32*1024)
|
||||||
@@ -778,11 +784,7 @@ func (p *SNIProxy) pipe(clientConn, targetConn net.Conn, clientReader io.Reader)
|
|||||||
// Copy data from target to client
|
// Copy data from target to client
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
defer func() {
|
defer closeConns()
|
||||||
if tcpConn, ok := clientConn.(*net.TCPConn); ok {
|
|
||||||
tcpConn.CloseWrite()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
// Use a large buffer for better performance
|
// Use a large buffer for better performance
|
||||||
buf := make([]byte, 32*1024)
|
buf := make([]byte, 32*1024)
|
||||||
|
|||||||
Reference in New Issue
Block a user