Skip site navigation (1)Skip section navigation (2)
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>