diff options
author | Pascal Terjan <pterjan@mageia.org> | 2018-10-15 19:31:51 +0000 |
---|---|---|
committer | Pascal Terjan <pterjan@mageia.org> | 2018-10-16 08:53:44 +0000 |
commit | 42894e0125505320327a16ba6c6e775ee2757f55 (patch) | |
tree | fa1021d66ca9dc11a8d7885ef74fdef5bd73ea69 | |
parent | 69e74732d254c75adc20afc25a8729ca568be832 (diff) | |
download | iurt-42894e0125505320327a16ba6c6e775ee2757f55.tar iurt-42894e0125505320327a16ba6c6e775ee2757f55.tar.gz iurt-42894e0125505320327a16ba6c6e775ee2757f55.tar.bz2 iurt-42894e0125505320327a16ba6c6e775ee2757f55.tar.xz iurt-42894e0125505320327a16ba6c6e775ee2757f55.zip |
Use SIGTERM to kill iurt and install a handler
-rw-r--r-- | NEWS | 2 | ||||
-rwxr-xr-x | iurt | 17 | ||||
-rwxr-xr-x | ulri | 4 |
3 files changed, 15 insertions, 8 deletions
@@ -1,5 +1,7 @@ - ulri: ignore failures when cancelling build - iurt: kill processes before unmounting in clean_chroot +- ulri, iurt: use SIGTERM instead of abusing ALARM and handle it to cleanup + in iurt 0.7.7 - ulri: only use mandatory archs for noarch builds @@ -71,13 +71,10 @@ sub bug_handler { #exit(1); } +my ($chroot_name, $chroot_tmp, $chroot, $chroot_ref); + $SIG{SEGV} = sub { bug_handler(@_, 1) }; #$SIG{__DIE__} = \&bug_handler; -$SIG{TERM} = sub { - warn "Got KILLED by SIGTERM at " . strftime("%c", localtime()) . " .\n"; - exit(1); -}; - my $program_name = 'iurt'; # sessing parameters @@ -516,6 +513,15 @@ if (!$config->{repository}) { die "FATAL $program_name: no repository have been defined (use --repository to specify one on the command line"; } +$SIG{TERM} = sub { + warn "Got KILLED by SIGTERM at " . strftime("%c", localtime()) . " .\n"; + if (!$run{use_old_chroot} && $chroot_tmp) { + print "Cleaning up before dying.\n"; + clean_chroot($chroot_tmp, \%run, $config); + } + exit(1); +}; + my $urpmi = Iurt::Urpmi->new(run => \%run, config => $config, urpmi_options => "-v --no-verify-rpm --tune-rpm=all --nolock --auto --no-recommends --ignoresize $config->{urpmi_options}"); $run{urpmi} = $urpmi; @@ -612,7 +618,6 @@ $run{done} = \%done; my $home = $config->{local_home}; my $chroot_base = $config->{chroot_base}; -my ($chroot_name, $chroot_tmp, $chroot, $chroot_ref); $chroot_name = "chroot_$run{distro_tag}$debug_tag.$run{my_arch}"; if (!$run{use_old_chroot}) { $chroot_tmp = "$chroot_base/chroot_tmp"; @@ -299,7 +299,7 @@ foreach my $prefix (keys %pkg_tree) { # Everything is fine, build is continuing! # Kill it if that package had failed on a mandatory arch if (check_if_mandatory_arch_failed($media, $ent, $config)) { - ssh($remote, "kill -14 $pid"); + ssh($remote, "kill -TERM $pid"); $pkg_tree{$prefix}{media}{$media}{cancelled_arch}{$arch} = 1; create_file("$done_dir/${prefix}_$arch.cancelled", "$bot $host"); } @@ -307,7 +307,7 @@ foreach my $prefix (keys %pkg_tree) { } if ($timeout) { plog('FAIL', "$bot timed out on $host/$arch ($seconds sec), killing it"); - ssh($remote, "kill -14 $pid"); + ssh($remote, "kill -TERM $pid"); # Give it some time to die/cleanup if ($seconds < 1.02 * $config->{faildelay}) { next bot; |