fix(tvix): Make working flag thread_local
Since the daemon is running in threads now rather than forking a process per connection (thanks to grpc) this static flag to prevent accidentally initializing a new worker during a build is getting stepped on by multiple threads. This converts it to thread-local, and also adds an actual message to the check so that if it hits in the future we know what's going on. Fixes: b/58 Change-Id: I07a2f1582e56709c104f79935e5405fa24888f59 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1940 Tested-by: BuildkiteCI Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: V <v@anomalous.eu>
This commit is contained in:
		
							parent
							
								
									0d1f6d0592
								
							
						
					
					
						commit
						5dcf64c128
					
				
					 1 changed files with 4 additions and 5 deletions
				
			
		
							
								
								
									
										9
									
								
								third_party/nix/src/libstore/build.cc
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								third_party/nix/src/libstore/build.cc
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -4241,14 +4241,13 @@ void SubstitutionGoal::handleEOF(int fd) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool working = false;
 | 
					ABSL_CONST_INIT static thread_local bool working = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Worker::Worker(LocalStore& store, std::ostream& log_sink)
 | 
					Worker::Worker(LocalStore& store, std::ostream& log_sink)
 | 
				
			||||||
    : log_sink_(log_sink), store(store) {
 | 
					    : log_sink_(log_sink), store(store) {
 | 
				
			||||||
  /* Debugging: prevent recursive workers. */
 | 
					  // Debugging: prevent recursive workers.
 | 
				
			||||||
  if (working) {
 | 
					  // TODO(grfn): Do we need this?
 | 
				
			||||||
    abort();
 | 
					  CHECK(!working) << "Worker initialized during execution of a worker";
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  working = true;
 | 
					  working = true;
 | 
				
			||||||
  nrLocalBuilds = 0;
 | 
					  nrLocalBuilds = 0;
 | 
				
			||||||
  lastWokenUp = steady_time_point::min();
 | 
					  lastWokenUp = steady_time_point::min();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue