File tree Expand file tree Collapse file tree 3 files changed +19
-2
lines changed
modules/system/activation
pkgs/by-name/sw/switch-to-configuration-ng/src/src Expand file tree Collapse file tree 3 files changed +19
-2
lines changed Original file line number Diff line number Diff line change 9595
9696make_path(" /run/nixos" , { mode => oct (755) });
9797open (my $stc_lock , ' >>' , ' /run/nixos/switch-to-configuration.lock' ) or die " Could not open lock - $! " ;
98- flock ($stc_lock , LOCK_EX) or die " Could not acquire lock - $! " ;
98+ flock ($stc_lock , LOCK_EX|LOCK_NB ) or die " Could not acquire lock - $! " ;
9999openlog(" nixos" , " " , LOG_USER);
100100
101101# run pre-switch checks
Original file line number Diff line number Diff line change @@ -732,6 +732,23 @@ in {
732732 out = switch_to_specialisation("${ machine } ", "modifiedSystemConf")
733733 assert_contains(out, "starting the following units: ${ dbusService } \n")
734734
735+ with subtest("aborts on already locked lock file"):
736+ (exitcode, _) = machine.execute(
737+ 'flock -x --nb /run/nixos/switch-to-configuration.lock -c "${ otherSystem } /bin/switch-to-configuration test"',
738+ timeout=5
739+ )
740+ # See man timeout, exit codes above 124 come from the timeout command
741+ # We want to make sure that stc actually exited with an error code,
742+ # if instead we hit the timeout, then it means that stc hangs, which is
743+ # what we don't want
744+ # TODO: We cannot match on the exact exit code since it's not consistent between
745+ # stc and stc-ng, since errno/last_os_error is not a very stable interface,
746+ # we should probably get rid of that in stc-ng once we got rid of the
747+ # perl implementation
748+ assert exitcode < 124, \
749+ "switch-to-configuration did not abort as expected, " + \
750+ f"probably it timed out instead (exit code: {exitcode}), 124 means timeout"
751+
735752 with subtest("fstab mounts"):
736753 switch_to_specialisation("${ machine } ", "")
737754 # add a mountpoint
Original file line number Diff line number Diff line change @@ -1037,7 +1037,7 @@ fn do_system_switch(action: Action) -> anyhow::Result<()> {
10371037 die ( ) ;
10381038 } ;
10391039
1040- let Ok ( _lock) = Flock :: lock ( lock, FlockArg :: LockExclusive ) else {
1040+ let Ok ( _lock) = Flock :: lock ( lock, FlockArg :: LockExclusiveNonblock ) else {
10411041 eprintln ! ( "Could not acquire lock" ) ;
10421042 die ( ) ;
10431043 } ;
You can’t perform that action at this time.
0 commit comments