mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-10-31 02:27:19 -04:00 
			
		
		
		
	caddytls: Fix data race in test (close #1844)
The race was in the test only; not in the production code
This commit is contained in:
		
							parent
							
								
									01f3593fd6
								
							
						
					
					
						commit
						c0c7437fa5
					
				| @ -21,6 +21,7 @@ import ( | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"golang.org/x/crypto/ocsp" | ||||
| @ -245,6 +246,7 @@ func RotateSessionTicketKeys(cfg *tls.Config) chan struct{} { | ||||
| var ( | ||||
| 	runTLSTicketKeyRotation        = standaloneTLSTicketKeyRotation | ||||
| 	setSessionTicketKeysTestHook   = func(keys [][32]byte) [][32]byte { return keys } | ||||
| 	setSessionTicketKeysTestHookMu sync.Mutex | ||||
| ) | ||||
| 
 | ||||
| // standaloneTLSTicketKeyRotation governs over the array of TLS ticket keys used to de/crypt TLS tickets. | ||||
| @ -271,7 +273,10 @@ func standaloneTLSTicketKeyRotation(c *tls.Config, ticker *time.Ticker, exitChan | ||||
| 		c.SessionTicketsDisabled = true // bail if we don't have the entropy for the first one | ||||
| 		return | ||||
| 	} | ||||
| 	c.SetSessionTicketKeys(setSessionTicketKeysTestHook(keys)) | ||||
| 	setSessionTicketKeysTestHookMu.Lock() | ||||
| 	setSessionTicketKeysHook := setSessionTicketKeysTestHook | ||||
| 	setSessionTicketKeysTestHookMu.Unlock() | ||||
| 	c.SetSessionTicketKeys(setSessionTicketKeysHook(keys)) | ||||
| 
 | ||||
| 	for { | ||||
| 		select { | ||||
| @ -298,7 +303,7 @@ func standaloneTLSTicketKeyRotation(c *tls.Config, ticker *time.Ticker, exitChan | ||||
| 				keys[0] = newTicketKey | ||||
| 			} | ||||
| 			// pushes the last key out, doesn't matter that we don't have a new one | ||||
| 			c.SetSessionTicketKeys(setSessionTicketKeysTestHook(keys)) | ||||
| 			c.SetSessionTicketKeys(setSessionTicketKeysHook(keys)) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -86,17 +86,20 @@ func TestStandaloneTLSTicketKeyRotation(t *testing.T) { | ||||
| 
 | ||||
| 	tlsGovChan := make(chan struct{}) | ||||
| 	defer close(tlsGovChan) | ||||
| 	callSync := make(chan *syncPkt, 1) | ||||
| 	defer close(callSync) | ||||
| 	callSync := make(chan syncPkt) | ||||
| 
 | ||||
| 	setSessionTicketKeysTestHookMu.Lock() | ||||
| 	oldHook := setSessionTicketKeysTestHook | ||||
| 	defer func() { | ||||
| 		setSessionTicketKeysTestHookMu.Lock() | ||||
| 		setSessionTicketKeysTestHook = oldHook | ||||
| 		setSessionTicketKeysTestHookMu.Unlock() | ||||
| 	}() | ||||
| 	setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte { | ||||
| 		callSync <- &syncPkt{keys[0], len(keys)} | ||||
| 		callSync <- syncPkt{keys[0], len(keys)} | ||||
| 		return keys | ||||
| 	} | ||||
| 	setSessionTicketKeysTestHookMu.Unlock() | ||||
| 
 | ||||
| 	c := new(tls.Config) | ||||
| 	timer := time.NewTicker(time.Millisecond * 1) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user