39 lines
1 KiB
Go
39 lines
1 KiB
Go
|
// 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()
|
||
|
}
|