socsvn commit: r238512 - soc2012/scher/par_ports/head/Mk
scher at FreeBSD.org
scher at FreeBSD.org
Thu Jun 28 22:22:54 UTC 2012
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}
#####################################################
More information about the svn-soc-all
mailing list