From c0d499594ddc5640724832b551ffccb0eec02810 Mon Sep 17 00:00:00 2001 From: Michael Tharp Date: Fri, 24 Jun 2016 19:10:40 +0000 Subject: [PATCH] Fix double-close of FD on garbage collection (#25) --- goagain.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/goagain.go b/goagain.go index a69a2fd..cdc4d2d 100644 --- a/goagain.go +++ b/goagain.go @@ -170,7 +170,11 @@ func Listener() (l net.Listener, err error) { if _, err = fmt.Sscan(os.Getenv("GOAGAIN_FD"), &fd); nil != err { return } - l, err = net.FileListener(os.NewFile(fd, os.Getenv("GOAGAIN_NAME"))) + // NewFile takes over the fd but FileListener makes its own copy. Make sure + // to clean up the former. + fdf := os.NewFile(fd, os.Getenv("GOAGAIN_NAME")) + defer fdf.Close() + l, err = net.FileListener(fdf) if nil != err { return } @@ -183,9 +187,6 @@ func Listener() (l net.Listener, err error) { ) return } - if err = syscall.Close(int(fd)); nil != err { - return - } return }