Skip to content

Commit

Permalink
fix goroutine leaks found by gtrr
Browse files Browse the repository at this point in the history
  • Loading branch information
gdamore committed Jul 30, 2019
1 parent 9cca285 commit 304ba93
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 6 deletions.
4 changes: 2 additions & 2 deletions transport/handshaker.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ type Handshaker interface {
Start(Pipe) error

// Waits for until a pipe has completely finished the
// handshaking at returns it.
// handshaking and returns it.
Wait() (Pipe, error)

// Close is used to close the handshaker. Any existing
// negotiations will be canceled, and the underlying
// transport sockets will be closed. Any new attempts
// to start will return a closed error.
// to start will return mangos.ErrClosed.
Close() error
}
10 changes: 9 additions & 1 deletion transport/ipc/ipc_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ type listener struct {
listener *net.UnixListener
opts options
handshaker transport.Handshaker
closeq chan struct{}
}

// Listen implements the PipeListener Listen method.
Expand All @@ -113,12 +114,19 @@ func (l *listener) Listen() error {
if err != nil {
return err
}
closeq := make(chan struct{})
l.closeq = closeq
l.listener = listener
go func() {
for {
conn, err := l.listener.AcceptUnix()
if err != nil {
continue
select {
case <-closeq:
return
default:
continue
}
}
p, err := transport.NewConnPipeIPC(conn, l.proto, l.opts)
if err != nil {
Expand Down
10 changes: 9 additions & 1 deletion transport/ipc/ipc_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ type listener struct {
listener net.Listener
opts map[string]interface{}
handshaker transport.Handshaker
closeq chan struct{}
}

// Listen implements the PipeListener Listen method.
Expand All @@ -108,16 +109,23 @@ func (l *listener) Listen() error {
MessageMode: false,
}

closeq := make(chan struct{})
listener, err := winio.ListenPipe("\\\\.\\pipe\\"+l.path, config)
if err != nil {
return err
}
l.listener = listener
l.closeq = closeq
go func() {
for {
conn, err := l.listener.Accept()
if err != nil {
continue
select {
case <-closeq:
return
default:
continue
}
}
p, err := transport.NewConnPipeIPC(conn, l.proto, l.opts)
if err != nil {
Expand Down
11 changes: 10 additions & 1 deletion transport/tcp/tcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ type listener struct {
listener *net.TCPListener
opts options
handshaker transport.Handshaker
closeq chan struct{}
}

func (l *listener) Accept() (transport.Pipe, error) {
Expand All @@ -168,12 +169,19 @@ func (l *listener) Listen() (err error) {
if err != nil {
return
}
closeq := make(chan struct{})
l.closeq = closeq
l.bound = l.listener.Addr()
go func() {
for {
conn, err := l.listener.AcceptTCP()
if err != nil {
continue
select {
case <-closeq:
return
default:
continue
}
}
if err = l.opts.configTCP(conn); err != nil {
conn.Close()
Expand Down Expand Up @@ -202,6 +210,7 @@ func (l *listener) Address() string {

func (l *listener) Close() error {
if l.listener != nil {
close(l.closeq)
l.listener.Close()
}
l.handshaker.Close()
Expand Down
10 changes: 9 additions & 1 deletion transport/tlstcp/tlstcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ type listener struct {
opts options
config *tls.Config
handshaker transport.Handshaker
closeq chan struct{}
}

func (l *listener) Listen() error {
Expand All @@ -187,16 +188,23 @@ func (l *listener) Listen() error {
return mangos.ErrTLSNoCert
}

closeq := make(chan struct{})
if l.listener, err = net.ListenTCP("tcp", l.addr); err != nil {
return err
}
l.closeq = closeq
l.bound = l.listener.Addr()

go func() {
for {
tconn, err := l.listener.AcceptTCP()
if err != nil {
continue
select {
case <-closeq:
return
default:
continue
}
}

if err = l.opts.configTCP(tconn); err != nil {
Expand Down

0 comments on commit 304ba93

Please sign in to comment.