From 7baa523b9c8aa1bff0059e1dcad1e140f9b885b5 Mon Sep 17 00:00:00 2001 From: jjhua Date: Fri, 30 Dec 2011 09:04:04 +0000 Subject: [PATCH] enhancement of syspowerinterval for powering on CECs within one frame. If there is just a sleep , it will be interrupted bye the child's signal. So enhance it git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11321 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/perl/xCAT/PPC.pm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/xCAT-server/lib/perl/xCAT/PPC.pm b/xCAT-server/lib/perl/xCAT/PPC.pm index b0e1cd128..11700310d 100644 --- a/xCAT-server/lib/perl/xCAT/PPC.pm +++ b/xCAT-server/lib/perl/xCAT/PPC.pm @@ -452,7 +452,7 @@ sub process_command { #print Dumper($one_d); if($$one_d[4] =~ /^fsp$/ || $$one_d[4] =~ /^cec$/) { if( $request->{syspowerinterval} > 0) { - Time::HiRes::sleep($request->{syspowerinterval}); + no_interrupt_sleep($request->{syspowerinterval}); } } } @@ -575,6 +575,16 @@ ENDOFFORK: return(0); } +sub no_interrupt_sleep { + my $sleep_time = shift; + my $sleep_end = time + $sleep_time; + while (1) { + my $sleep_duration = $sleep_end - time; + last if $sleep_duration <= 0; + Time::HiRes::sleep($sleep_duration); + } +} + sub kill_children_by_pid { my $pid = shift; my @pids = `ps -o pid,ppid -e`; @@ -1347,7 +1357,7 @@ sub handle_find_hw_children { if (!defined($mtms)) { return undef; } - my @nodearray = $vpdtab->getAttribs({serial=>$mtms->{serial}, mtm=>$mtms->{mtm}}, qw(node side)); + my @nodearray = $vpdtab->getAttribs({serial=>$mtms->{serial}, mtm=>$mtms->{mtm}}, qw(node side)); # need regx if (!defined(@nodearray)) { return undef; }