MAKEALL: Fix kill_children

When building in parallel, make sure that we look up the children
based on the the actual process group id instead of just assuming
that the MAKEALL pid is the process group id.

Also ensure that logs from incomplete builds are deleted in the
process.

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Joe Hershberger 2012-10-30 15:55:20 +00:00 committed by Tom Rini
parent 468ebf190a
commit c97d59cbda
1 changed files with 24 additions and 2 deletions

26
MAKEALL
View File

@ -616,6 +616,13 @@ list_target() {
donep="${LOG_DIR}/._done_" donep="${LOG_DIR}/._done_"
skipp="${LOG_DIR}/._skip_" skipp="${LOG_DIR}/._skip_"
build_target_killed() {
echo "Aborted $target build."
# Remove the logs for this board since it was aborted
rm -f ${LOG_DIR}/$target.MAKELOG ${LOG_DIR}/$target.ERR
exit
}
build_target() { build_target() {
target=$1 target=$1
build_idx=$2 build_idx=$2
@ -628,6 +635,7 @@ build_target() {
if [ $BUILD_MANY == 1 ] ; then if [ $BUILD_MANY == 1 ] ; then
output_dir="${OUTPUT_PREFIX}/${target}" output_dir="${OUTPUT_PREFIX}/${target}"
mkdir -p "${output_dir}" mkdir -p "${output_dir}"
trap build_target_killed TERM
else else
output_dir="${OUTPUT_PREFIX}" output_dir="${OUTPUT_PREFIX}"
fi fi
@ -646,6 +654,8 @@ build_target() {
fi fi
if [ $BUILD_MANY == 1 ] ; then if [ $BUILD_MANY == 1 ] ; then
trap - TERM
${MAKE} -s tidy ${MAKE} -s tidy
if [ -s ${LOG_DIR}/${target}.ERR ] ; then if [ -s ${LOG_DIR}/${target}.ERR ] ; then
@ -727,7 +737,9 @@ build_targets() {
if [ $BUILD_MANY == 1 ] ; then if [ $BUILD_MANY == 1 ] ; then
build_target ${t} ${TOTAL_CNT} & build_target ${t} ${TOTAL_CNT} &
else else
CUR_TGT="${t}"
build_target ${t} ${TOTAL_CNT} build_target ${t} ${TOTAL_CNT}
CUR_TGT=''
fi fi
fi fi
@ -751,7 +763,11 @@ build_targets() {
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
kill_children() { kill_children() {
kill -- "-$1" local pgid=`ps -p $$ --no-headers -o "%r" | tr -d ' '`
local children=`pgrep -g $pgid | grep -v $$ | grep -v $pgid`
kill $children 2> /dev/null
wait $children 2> /dev/null
exit exit
} }
@ -759,6 +775,9 @@ kill_children() {
print_stats() { print_stats() {
if [ "$ONLY_LIST" == 'y' ] ; then return ; fi if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
# Only count boards that completed
: $((TOTAL_CNT = `find ${skipp}* 2> /dev/null | wc -l`))
rm -f ${donep}* ${skipp}* rm -f ${donep}* ${skipp}*
if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then
@ -768,6 +787,9 @@ print_stats() {
WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/` WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/`
WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done` WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done`
WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'` WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'`
else
# Remove the logs for any board that was interrupted
rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR
fi fi
echo "" echo ""
@ -782,7 +804,7 @@ print_stats() {
echo "----------------------------------------------------------" echo "----------------------------------------------------------"
if [ $BUILD_MANY == 1 ] ; then if [ $BUILD_MANY == 1 ] ; then
kill_children $$ & kill_children
fi fi
exit $RC exit $RC