167e8f18da
* Prevent deadlock in indexer initialisation during graceful restart * Move from gracehttp to our own service to add graceful ssh * Add timeout for start of indexers and make hammer time configurable * Fix issue with re-initialization in indexer during tests * move the code to detect use of closed to graceful * Handle logs gracefully - add a pid suffix just before restart * Move to using a cond and a holder for indexers * use time.Since * Add some comments and attribution * update modules.txt * Use zero to disable timeout * Move RestartProcess to its own file * Add cleanup routine
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()
|
|
}
|