From owner-svn-soc-all@FreeBSD.ORG Thu Jun 28 22:22:54 2012 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from socsvn.FreeBSD.org (unknown [IPv6:2001:4f8:fff6::2f]) by hub.freebsd.org (Postfix) with SMTP id 1473B106566B for ; Thu, 28 Jun 2012 22:22:52 +0000 (UTC) (envelope-from scher@FreeBSD.org) Received: by socsvn.FreeBSD.org (sSMTP sendmail emulation); Thu, 28 Jun 2012 22:22:52 +0000 Date: Thu, 28 Jun 2012 22:22:52 +0000 From: scher@FreeBSD.org To: svn-soc-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Message-Id: <20120628222252.1473B106566B@hub.freebsd.org> Cc: Subject: socsvn commit: r238512 - soc2012/scher/par_ports/head/Mk X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jun 2012 22:22:54 -0000 Author: scher Date: Thu Jun 28 22:22:51 2012 New Revision: 238512 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238512 Log: [new_feature] ${_parv_CHECK_SEQ} considers parent process's lock file [user_feedback] feedback changes in ${_parv_CHECK_SEQ} ${_parv_CHECK_LOCK} ${_TERMINATE_PROCESS_TREE} scripts Modified: soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Modified: soc2012/scher/par_ports/head/Mk/bsd.parallel.mk ============================================================================== --- soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Thu Jun 28 21:24:56 2012 (r238511) +++ soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Thu Jun 28 22:22:51 2012 (r238512) @@ -343,17 +343,27 @@ if [ \$${pid} ]; then \ ps -p \$${pid} > /dev/null && status=\$$? || status=\$$?; \ if [ \$${status} -eq 0 ]; then \ - ${_dparv_START_OUTPUT}; \ - ${ECHO_CMD} Unable to lock ${LOCK_DIR}/$${pkg_name}; \ - ${ECHO_CMD} Dir: ${LOCK_DIR} is already locked by another working process ...; \ - ${_dparv_START_OUTPUT}; \ + cur_pid=${.MAKE.PID}; \ + while true; do \ + ppid=\$$( ps -o ppid -p \$${cur_pid} | ${AWK} "NR==2" ); \ + if [ \$${ppid} -eq \$${pid} ]; then \ + ${ECHO_CMD} '===> $${pkg_name} is locked by parent make process'; \ + ${ECHO_CMD} ' We are allowed to work here'; \ + exit 0; \ + elif [ \$${ppid} -eq 0 ]; then \ + break; \ + else \ + cur_pid=\$${ppid}; \ + fi; \ + done; \ + ${ECHO_CMD} '===> $${pkg_name} is already locked by another working process'; \ exit ${_parv_ON_LOCK_EXIT_STATUS}; \ else \ - ${_dparv_START_OUTPUT}; \ - ${ECHO_CMD} Dir: ${LOCK_DIR}/$${pkg_name} Stalled lock Detected!; \ - ${ECHO_CMD} Deleting stalled lock. PID=\$${pid}; \ - ${_dparv_END_OUTPUT}; \ + ${ECHO_CMD} '===> Stalled lock Detected for $${pkg_name}'; \ + ${ECHO_CMD} ' Deleting stalled lock'; \ fi; \ + else \ + ${ECHO_CMD} '===> $${pkg_name} is not locked'; \ fi; \ ${RM} -rf ${LOCK_DIR}/$${pkg_name} @@ -364,9 +374,8 @@ [ $${status} -eq ${_parv_ON_LOCK_EXIT_STATUS} ]; then \ exit ${_parv_ON_LOCK_EXIT_STATUS}; \ else \ - ${_dparv_START_OUTPUT}; \ - ${ECHO_CMD} "Unhandled EXIT STATUS = $${status}. Terminating"; \ - ${_dparv_END_OUTPUT}; \ + ${ECHO_CMD}; \ + ${ECHO_CMD} "Unhandled EXIT STATUS = $${status}. Terminating..."; \ exit 1; \ fi; \ } @@ -511,7 +520,8 @@ # _TERMINATE_PROCESS_TREE= \ [ $$? -eq 0 ] && exit 0; \ - ${ECHO_CMD} Terminating process tree strating from ${.MAKE.PID}; \ + ${ECHO_CMD}; \ + ${ECHO_CMD} Terminating process tree strating from ${PKGNAME} build process \( PID ${.MAKE.PID} \); \ pids_to_kill=${.MAKE.PID}; \ /bin/kill -STOP ${.MAKE.PID} 2> /dev/null || ${DO_NADA}; \ ppids=$$( ps -xao pid,ppid | awk "{ if (\$$2==${.MAKE.PID}) {print \$$1} }" ); \ @@ -529,7 +539,7 @@ done; \ if [ $${\#ppids} -eq 0 ]; then break; fi; \ done; \ - ${ECHO_CMD} PIDs to kill: $${pids_to_kill}; \ + ${ECHO_CMD} Processes with the following PIDs will be killed: $${pids_to_kill}; \ /bin/kill -KILL $${pids_to_kill} 2> /dev/null || ${DO_NADA} #####################################################