[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