Date: Wed, 06 Jun 2012 18:44:31 +0000 From: scher@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r237230 - soc2012/scher/par_ports/head/Mk Message-ID: <20120606184431.3B4FA1065670@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
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; \
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120606184431.3B4FA1065670>