summaryrefslogtreecommitdiff
path: root/listen_unix.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2023-06-21 17:59:54 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2023-06-21 17:59:54 -0600
commit2b2addebb8cc5dfc7d4d1d34c82f3c46159fea12 (patch)
treec59228edb42936d4127f1e119bd5341da0171fab /listen_unix.go
parent9563666bfb93f1708b044c7b1e5d0aa91afd029a (diff)
Appease linter
Diffstat (limited to 'listen_unix.go')
-rw-r--r--listen_unix.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/listen_unix.go b/listen_unix.go
index e31ecac..8870da5 100644
--- a/listen_unix.go
+++ b/listen_unix.go
@@ -138,6 +138,26 @@ func reusePort(network, address string, conn syscall.RawConn) error {
})
}
+type unixListener struct {
+ *net.UnixListener
+ mapKey string
+ count *int32 // accessed atomically
+}
+
+func (uln *unixListener) Close() error {
+ newCount := atomic.AddInt32(uln.count, -1)
+ if newCount == 0 {
+ defer func() {
+ addr := uln.Addr().String()
+ unixSocketsMu.Lock()
+ delete(unixSockets, uln.mapKey)
+ unixSocketsMu.Unlock()
+ _ = syscall.Unlink(addr)
+ }()
+ }
+ return uln.UnixListener.Close()
+}
+
// deleteListener is a type that simply deletes itself
// from the listenerPool when it closes. It is used
// solely for the purpose of reference counting (i.e.