Эх сурвалжийг харах

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>
Joe Hershberger 12 жил өмнө
parent
commit
c97d59cbda
1 өөрчлөгдсөн 24 нэмэгдсэн , 2 устгасан
  1. 24 2
      MAKEALL

+ 24 - 2
MAKEALL

@@ -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