2019-10-16 11:43:44 -04:00
|
|
|
// +build !windows
|
|
|
|
|
2019-10-15 09:39:51 -04:00
|
|
|
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package graceful
|
|
|
|
|
|
|
|
import "sync"
|
|
|
|
|
|
|
|
var cleanupWaitGroup sync.WaitGroup
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
cleanupWaitGroup = sync.WaitGroup{}
|
|
|
|
|
|
|
|
// There are three places that could inherit sockets:
|
|
|
|
//
|
|
|
|
// * HTTP or HTTPS main listener
|
|
|
|
// * HTTP redirection fallback
|
|
|
|
// * SSH
|
|
|
|
//
|
|
|
|
// If you add an additional place you must increment this number
|
|
|
|
// and add a function to call InformCleanup if it's not going to be used
|
|
|
|
cleanupWaitGroup.Add(3)
|
|
|
|
|
|
|
|
// Wait till we're done getting all of the listeners and then close
|
|
|
|
// the unused ones
|
|
|
|
go func() {
|
|
|
|
cleanupWaitGroup.Wait()
|
|
|
|
// Ignore the error here there's not much we can do with it
|
|
|
|
// They're logged in the CloseProvidedListeners function
|
|
|
|
_ = CloseProvidedListeners()
|
|
|
|
}()
|
|
|
|
}
|
|
|
|
|
|
|
|
// InformCleanup tells the cleanup wait group that we have either taken a listener
|
|
|
|
// or will not be taking a listener
|
|
|
|
func InformCleanup() {
|
|
|
|
cleanupWaitGroup.Done()
|
|
|
|
}
|