mirror of
https://git.yoctoproject.org/poky
synced 2026-04-21 21:32:12 +02:00
icecc: Fix race condition when packaging toolchain
In the current implementation there can be a race condition while creating the toolchain archive causing the build to break. This is fixed by locking the toolchain archiving step using flock. (From OE-Core rev: 8a30be803e91e66688cfc27ca4c21f26fb22eed8) Signed-off-by: Tobias Henkel <tobias.henkel@bmw-carit.de> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
0dbd5456f9
commit
78c6e69bbe
@@ -202,6 +202,21 @@ def icc_get_and_check_tool(bb, d, tool):
|
||||
else:
|
||||
return t
|
||||
|
||||
wait_for_file() {
|
||||
local TIME_ELAPSED=0
|
||||
local FILE_TO_TEST=$1
|
||||
local TIMEOUT=$2
|
||||
until [ -f "$FILE_TO_TEST" ]
|
||||
do
|
||||
TIME_ELAPSED=`expr $TIME_ELAPSED + 1`
|
||||
if [ $TIME_ELAPSED -gt $TIMEOUT ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
def set_icecc_env():
|
||||
# dummy python version of set_icecc_env
|
||||
return
|
||||
@@ -247,10 +262,22 @@ set_icecc_env() {
|
||||
ICECC_AS="`which as`"
|
||||
fi
|
||||
|
||||
if [ ! -r "${ICECC_VERSION}" ]
|
||||
if [ ! -f "${ICECC_VERSION}.done" ]
|
||||
then
|
||||
mkdir -p "`dirname "${ICECC_VERSION}"`"
|
||||
${ICECC_ENV_EXEC} "${ICECC_CC}" "${ICECC_CXX}" "${ICECC_AS}" "${ICECC_VERSION}"
|
||||
|
||||
# the ICECC_VERSION generation step must be locked by a mutex
|
||||
# in order to prevent race conditions
|
||||
if flock -n "${ICECC_VERSION}.lock" \
|
||||
${ICECC_ENV_EXEC} "${ICECC_CC}" "${ICECC_CXX}" "${ICECC_AS}" "${ICECC_VERSION}"
|
||||
then
|
||||
touch "${ICECC_VERSION}.done"
|
||||
elif [ ! wait_for_file "${ICECC_VERSION}.done" 30 ]
|
||||
then
|
||||
# locking failed so wait for ${ICECC_VERSION}.done to appear
|
||||
bbwarn "Timeout waiting for ${ICECC_VERSION}.done"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
export ICECC_VERSION ICECC_CC ICECC_CXX
|
||||
|
||||
Reference in New Issue
Block a user