From owner-svn-soc-all@FreeBSD.ORG Wed Jun 6 18:44:33 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 3B4FA1065670 for ; Wed, 6 Jun 2012 18:44:31 +0000 (UTC) (envelope-from scher@FreeBSD.org) Received: by socsvn.FreeBSD.org (sSMTP sendmail emulation); Wed, 06 Jun 2012 18:44:31 +0000 Date: Wed, 06 Jun 2012 18:44:31 +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: <20120606184431.3B4FA1065670@hub.freebsd.org> Cc: Subject: socsvn commit: r237230 - 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: Wed, 06 Jun 2012 18:44:33 -0000 Author: scher Date: Wed Jun 6 18:44:30 2012 New Revision: 237230 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237230 Log: [bugfix] make process (submake) is allowed to work in locked port's if and only if this port's dir was locked by parent make process Hence all submakes can work in port's dir, locked by parent make Modified: soc2012/scher/par_ports/head/Mk/bsd.parallel.mk soc2012/scher/par_ports/head/Mk/bsd.port.mk Modified: soc2012/scher/par_ports/head/Mk/bsd.parallel.mk ============================================================================== --- soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Wed Jun 6 17:28:46 2012 (r237229) +++ soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Wed Jun 6 18:44:30 2012 (r237230) @@ -121,7 +121,25 @@ if [ $${pid} ]; then \ ps -p $${pid} > /dev/null && status=$$? || status=$$?; \ if [ $${status} -eq 0 ]; then \ - exit ${_parv_ON_LOCK_EXIT_STATUS}; \ + if [ ${_lock_dir} = "LOCK_DIR" ]; then \ + cur_pid=${.MAKE.PID}; \ + while true; do \ + ppid=$$( ps -o ppid -p $${cur_pid} | ${AWK} "NR==2" ); \ + if [ $${ppid} -eq $${pid} ]; then \ + ${_dparv_START_OUTPUT}; \ + ${ECHO_CMD} "${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE} is locked by parent make process!"; \ + ${ECHO_CMD} "We are allowed to work here"; \ + ${_dparv_END_OUTPUT}; \ + break; \ + elif [ $${ppid} -eq 0 ]; then \ + exit ${_parv_ON_LOCK_EXIT_STATUS}; \ + else \ + cur_pid=$${ppid}; \ + fi; \ + done; \ + else \ + exit ${_parv_ON_LOCK_EXIT_STATUS}; \ + fi; \ else \ ${_dparv_START_OUTPUT}; \ ${ECHO_CMD} "Dir: ${${_lock_dir}} Stalled lock Detected!"; \ @@ -200,18 +218,20 @@ # _parv_LOCK_DIR_DO_UNLOCK # _parv_${_lock_dir}_DO_UNLOCK= \ - lockf -k -t ${_parv_WAIT_FOR_UNLOCK_TIME} ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE} \ - ${RM} ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE} && { \ + lockf -k -t ${_parv_WAIT_FOR_UNLOCK_TIME} ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE} ${SH} -c '{ \ + pid=$$(${CAT} ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE}); \ + if [ ${.MAKE.PID} -eq $${pid} ]; then \ + ${RM} -rf ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE}; \ ${_dparv_START_OUTPUT}; \ - ${ECHO_CMD} "Dir: ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE} is unlocked"; \ + ${ECHO_CMD} Dir: ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE} is unlocked; \ ${_dparv_END_OUTPUT}; \ - } || { \ + else \ ${_dparv_START_OUTPUT}; \ - ${ECHO_CMD} "Hard unlock!"; \ - ${RM} -rf ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE}; \ + ${ECHO_CMD} Dir: ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE} was locked by another process; \ + ${ECHO_CMD} Leave lock file; \ ${_dparv_END_OUTPUT}; \ - } - + fi; \ + }' .endfor # _lock_dir in PKG_DBDIR .CURDIR .undef _parv_${_lock_dir}_LOCK_FILE Modified: soc2012/scher/par_ports/head/Mk/bsd.port.mk ============================================================================== --- soc2012/scher/par_ports/head/Mk/bsd.port.mk Wed Jun 6 17:28:46 2012 (r237229) +++ soc2012/scher/par_ports/head/Mk/bsd.port.mk Wed Jun 6 18:44:30 2012 (r237230) @@ -5123,6 +5123,7 @@ .if defined(${deptype}_DEPENDS) .if !defined(NO_DEPENDS) @depends=`${ECHO_CMD} "${${deptype}_DEPENDS}"`; \ + depends=$$( echo "$${depends}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \ active_builds=""; \ echo "debugging_out_here: ------------------------- " > ${PORTSDIR}/tmp/log; \ echo "debugging_out_here: ALL DEPS - $${depends}" > ${PORTSDIR}/tmp/log; \