[U-Boot] [PATCH 1/2] MAKEALL: Fix kill_children

Simon Glass sjg at chromium.org
Wed Oct 31 21:21:45 CET 2012


On Tue, Oct 30, 2012 at 6:55 PM, Joe Hershberger <joe.hershberger at ni.com> wrote:
> 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 at ni.com>

Acked-by: Simon Glass <sjg at chromium.org>
Tested-by: Simon Glass <sjg at chromium.org>

> ---
>  MAKEALL | 26 ++++++++++++++++++++++++--
>  1 file changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/MAKEALL b/MAKEALL
> index 84a5c92..1f88dc5 100755
> --- a/MAKEALL
> +++ b/MAKEALL
> @@ -610,6 +610,13 @@ list_target() {
>  donep="${LOG_DIR}/._done_"
>  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() {
>         target=$1
>         build_idx=$2
> @@ -622,6 +629,7 @@ build_target() {
>         if [ $BUILD_MANY == 1 ] ; then
>                 output_dir="${OUTPUT_PREFIX}/${target}"
>                 mkdir -p "${output_dir}"
> +               trap build_target_killed TERM
>         else
>                 output_dir="${OUTPUT_PREFIX}"
>         fi
> @@ -640,6 +648,8 @@ build_target() {
>         fi
>
>         if [ $BUILD_MANY == 1 ] ; then
> +               trap - TERM
> +
>                 ${MAKE} -s tidy
>
>                 if [ -s ${LOG_DIR}/${target}.ERR ] ; then
> @@ -721,7 +731,9 @@ build_targets() {
>                         if [ $BUILD_MANY == 1 ] ; then
>                                 build_target ${t} ${TOTAL_CNT} &
>                         else
> +                               CUR_TGT="${t}"
>                                 build_target ${t} ${TOTAL_CNT}
> +                               CUR_TGT=''
>                         fi
>                 fi
>
> @@ -745,7 +757,11 @@ build_targets() {
>  #-----------------------------------------------------------------------
>
>  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
>  }
> @@ -753,6 +769,9 @@ kill_children() {
>  print_stats() {
>         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}*
>
>         if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then
> @@ -762,6 +781,9 @@ print_stats() {
>                 WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/`
>                 WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done`
>                 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
>
>         echo ""
> @@ -776,7 +798,7 @@ print_stats() {
>         echo "----------------------------------------------------------"
>
>         if [ $BUILD_MANY == 1 ] ; then
> -               kill_children $$ &
> +               kill_children
>         fi
>
>         exit $RC
> --
> 1.7.11.5
>


More information about the U-Boot mailing list