[OE-core] [RFC][PATCH] sstate: run recipe-provided hooks outside of ${B}
Martin Jansa
martin.jansa at gmail.com
Tue Sep 22 17:30:40 UTC 2015
On Tue, Sep 22, 2015 at 03:11:53PM +0100, Ross Burton wrote:
> To avoid races between the sstate tasks/hooks using ${B} as the cwd, and other
> tasks such as cmake_do_configure which deletes and re-creates ${B}, ensure that
> all sstate hooks are run in the right directory, and run the prefunc/postfunc in WORKDIR.
No error in first 126 iterations of:
for i in `seq -w 1 1000`; do bitbake -c cleansstate perf; bitbake -c build -f perf 2>&1 | tee log.perf.$i; done
so it's good improvement, thanks!
Please get this merged in fido and dizzy as well.
> Signed-off-by: Ross Burton <ross.burton at intel.com>
> ---
> meta/classes/sstate.bbclass | 26 ++++++++++----------------
> 1 file changed, 10 insertions(+), 16 deletions(-)
>
> diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
> index b9ad6da..695929c 100644
> --- a/meta/classes/sstate.bbclass
> +++ b/meta/classes/sstate.bbclass
> @@ -61,16 +61,6 @@ SSTATE_SIG_PASSPHRASE ?= ""
> # Whether to verify the GnUPG signatures when extracting sstate archives
> SSTATE_VERIFY_SIG ?= "0"
>
> -# Specify dirs in which the shell function is executed and don't use ${B}
> -# as default dirs to avoid possible race about ${B} with other task.
> -sstate_create_package[dirs] = "${SSTATE_BUILDDIR}"
> -sstate_unpack_package[dirs] = "${SSTATE_INSTDIR}"
> -
> -# Do not run sstate_hardcode_path() in ${B}:
> -# the ${B} maybe removed by cmake_do_configure() while
> -# sstate_hardcode_path() running.
> -sstate_hardcode_path[dirs] = "${SSTATE_BUILDDIR}"
> -
> python () {
> if bb.data.inherits_class('native', d):
> d.setVar('SSTATE_PKGARCH', d.getVar('BUILD_ARCH', False))
> @@ -267,7 +257,7 @@ def sstate_install(ss, d):
> oe.path.copyhardlinktree(state[1], state[2])
>
> for postinst in (d.getVar('SSTATEPOSTINSTFUNCS', True) or '').split():
> - bb.build.exec_func(postinst, d)
> + bb.build.exec_func(postinst, d, (os.getcwd(),))
>
> for lock in locks:
> bb.utils.unlockfile(lock)
> @@ -307,7 +297,8 @@ def sstate_installpkg(ss, d):
> bb.warn("Cannot verify signature on sstate package %s" % sstatepkg)
>
> for f in (d.getVar('SSTATEPREINSTFUNCS', True) or '').split() + ['sstate_unpack_package'] + (d.getVar('SSTATEPOSTUNPACKFUNCS', True) or '').split():
> - bb.build.exec_func(f, d)
> + # All hooks should run in the SSTATE_INSTDIR
> + bb.build.exec_func(f, d, (sstateinst,))
>
> for state in ss['dirs']:
> prepdir(state[1])
> @@ -579,8 +570,9 @@ def sstate_package(ss, d):
>
> for f in (d.getVar('SSTATECREATEFUNCS', True) or '').split() + ['sstate_create_package'] + \
> (d.getVar('SSTATEPOSTCREATEFUNCS', True) or '').split():
> - bb.build.exec_func(f, d)
> -
> + # All hooks should run in SSTATE_BUILDDIR.
> + bb.build.exec_func(f, d, (sstatebuild,))
> +
> bb.siggen.dump_this_task(sstatepkg + ".siginfo", d)
>
> return
> @@ -642,19 +634,21 @@ python sstate_task_prefunc () {
> shared_state = sstate_state_fromvars(d)
> sstate_clean(shared_state, d)
> }
> +sstate_task_prefunc[dirs] = "${WORKDIR}"
>
> python sstate_task_postfunc () {
> shared_state = sstate_state_fromvars(d)
> sstate_install(shared_state, d)
> for intercept in shared_state['interceptfuncs']:
> - bb.build.exec_func(intercept, d)
> + bb.build.exec_func(intercept, d, (os.getcwd(),))
> omask = os.umask(002)
> if omask != 002:
> bb.note("Using umask 002 (not %0o) for sstate packaging" % omask)
> sstate_package(shared_state, d)
> os.umask(omask)
> }
> -
> +sstate_task_postfunc[dirs] = "${WORKDIR}"
> +
>
> #
> # Shell function to generate a sstate package from a directory
> --
> 2.1.4
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
--
Martin 'JaMa' Jansa jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20150922/13406a4b/attachment-0002.sig>
More information about the Openembedded-core
mailing list