Skip to contentSkip to conversation

sstate.bbclass: Remove possibility of file corruption and make package writing atomic

PATCH New Richard Purdie 1 participant 1 message Mar 22, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sstate.bbclass: Remove possibility of file corruption and make package writing atomic

There is currently a race window when creating sstate packages since we don't atomically write the files to SSTATE_DIR. This change ensures we do so by writing to a temporary file and then doing an atomic move.

---

meta/classes/sstate.bbclass +4 -2
index 1570654..20e66e2 100644
@@ -455,12 +455,14 @@ python sstate_task_postfunc () {
 #
 sstate_create_package () {
 	cd ${SSTATE_BUILDDIR}
+	TFILE=`mktemp ${SSTATE_PKG}.XXXXXXXX`
 	# Need to handle empty directories
 	if [ "$(ls -A)" ]; then
-		tar -czf ${SSTATE_PKG} *
+		tar -czf $TFILE *
 	else
-		tar -cz --file=${SSTATE_PKG} --files-from=/dev/null
+		tar -cz --file=$TFILE --files-from=/dev/null
 	fi
+	mv $TFILE ${SSTATE_PKG}
 
 	cd ${WORKDIR}
 	rm -rf ${SSTATE_BUILDDIR}