[OE-core] [PATCH] sstate: Reduce race windows

Khem Raj raj.khem at gmail.com
Sat Aug 3 15:12:18 UTC 2019


On Sat, Aug 3, 2019 at 6:35 AM Richard Purdie
<richard.purdie at linuxfoundation.org> wrote:
>
> 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.

                                 ^^^^
typo .

> 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.
>

yes this is helpful. Change looks good.

> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> ---
>  meta/classes/sstate.bbclass | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
> index aa5841446c9..11222223a9b 100644
> --- a/meta/classes/sstate.bbclass
> +++ b/meta/classes/sstate.bbclass
> @@ -755,6 +755,11 @@ sstate_task_postfunc[dirs] = "${WORKDIR}"
>  sstate_create_package () {
>         TFILE=`mktemp ${SSTATE_PKG}.XXXXXXXX`
>
> +       # Exit earlu if it already exists
                       ^^^
typo


> +       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 () {
> --
> 2.20.1
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


More information about the Openembedded-core mailing list