sstate: Reduce race windows

When we write to the sstate directory we try to do so atomically so
consumers either see one version or another but never an imcomplete file.
Unfortunately this is reliant on filesystem support and with some NFS
configurations a replaced file would be lost from memory even if users held
open descriptors.

It makes sense to try and avoid replacing existing files where we can.

(From OE-Core rev: 18cdc087fd5da30e2b31f3d4e81b153cd36ca844)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2019-08-03 11:49:23 +01:00
parent dad9cd5cca
commit 6c7c0cefd3

View File

@@ -755,6 +755,11 @@ sstate_task_postfunc[dirs] = "${WORKDIR}"
sstate_create_package () {
TFILE=`mktemp ${SSTATE_PKG}.XXXXXXXX`
# Exit earlu if it already exists
if [ -e ${SSTATE_PKG} ]; then
return
fi
# Use pigz if available
OPT="-czS"
if [ -x "$(command -v pigz)" ]; then
@@ -774,7 +779,12 @@ sstate_create_package () {
tar $OPT --file=$TFILE --files-from=/dev/null
fi
chmod 0664 $TFILE
mv -f $TFILE ${SSTATE_PKG}
# Skip if it was already created by some other process
if [ ! -e ${SSTATE_PKG} ]; then
mv -f $TFILE ${SSTATE_PKG}
else
rm $TFILE
fi
}
python sstate_sign_package () {