* Don't use IPC::Open2, it has a subtle race bug on Mac OS X 10.4. If
the parent runs before the child, it closes some pipe file descriptors which causes the child to fail due to a bad file descriptor. So we just use the normal open() function instead. This fixes NIX-14 (intermittent nix-pull failures).
This commit is contained in:
		
							parent
							
								
									a864aca44c
								
							
						
					
					
						commit
						95304172a5
					
				
					 1 changed files with 2 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
#! @perl@ -w -I@libexecdir@/nix
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use IPC::Open2;
 | 
			
		||||
use POSIX qw(tmpnam);
 | 
			
		||||
use readmanifest;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -74,11 +73,9 @@ print "$size store paths in manifest\n";
 | 
			
		|||
# Register all substitutes.
 | 
			
		||||
print STDERR "registering substitutes...\n";
 | 
			
		||||
 | 
			
		||||
my $pid = open2(\*READ, \*WRITE, "$binDir/nix-store --register-substitutes")
 | 
			
		||||
my $pid = open(WRITE, "|$binDir/nix-store --register-substitutes")
 | 
			
		||||
    or die "cannot run nix-store";
 | 
			
		||||
 | 
			
		||||
close READ;
 | 
			
		||||
 | 
			
		||||
foreach my $storePath (keys %narFiles) {
 | 
			
		||||
    my $narFileList = $narFiles{$storePath};
 | 
			
		||||
    foreach my $narFile (@{$narFileList}) {
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +92,4 @@ foreach my $storePath (keys %narFiles) {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
close WRITE;
 | 
			
		||||
 | 
			
		||||
waitpid $pid, 0;
 | 
			
		||||
$? == 0 or die "nix-store failed";
 | 
			
		||||
close WRITE or die "nix-store failed: $?";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue