You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							40 lines
						
					
					
						
							1.0 KiB
						
					
					
				| // +build !windows
 | |
| 
 | |
| // 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()
 | |
| }
 | |
| 
 |