[oe] race condition during eglibc do_stage() fails my build

Leon Woestenberg leon.woestenberg at gmail.com
Thu Oct 15 13:40:52 UTC 2009


Hello Khem, all,

I am hitting a race condition during eglibc do_stage.

do_stage() mentions it implements a workaround for a possible race,
but I do not understand what races.


do_stage() {
    # Installing directly into staging creates some races between existing
    # glibc-initial files and us. We could use a new DESTDIR but we may as
    # well just copy the data installed by do_install
    cp -pPR /home/leon/sandbox/gtd100/openembedded/tmp/work/ppce500v2-angstrom-linux-gnuspe/eglibc-2.10-r7.1/image/*
/home/leon/sandbox/gtd100/openembedded/tmp/staging/ppce500v2-angstrom-linux-gnuspe/

}

Note that the temporary files it tries to copy:


NOTE: generation of binary locales disabled. this may break i18n!
ERROR: function do_stage failed
ERROR: log data follows
(/home/leon/sandbox/gtd100/openembedded/tmp/work/ppce500v2-angstrom-linux-gnuspe/eglibc-2.10-r7.1/temp/log.do_stage.32628)
| cp: cannot stat
`/home/leon/sandbox/gtd100/openembedded/tmp/work/ppce500v2-angstrom-linux-gnuspe/eglibc-2.10-r7.1/image/usr/lib/st4rsJoc':
No such file or directory
| cp: cannot stat
`/home/leon/sandbox/gtd100/openembedded/tmp/work/ppce500v2-angstrom-linux-gnuspe/eglibc-2.10-r7.1/image/usr/lib/stRhhUms':
No such file or directory
NOTE: Task failed:
/home/leon/sandbox/gtd100/openembedded/tmp/work/ppce500v2-angstrom-linux-gnuspe/eglibc-2.10-r7.1/temp/log.do_stage.32628


After failure, indeed some other-named temporary files where left,
indicating there was still activity going on:

leon at bigtee:~/sandbox/gtd100/openembedded/tmp/work/ppce500v2-angstrom-linux-gnuspe/eglibc-2.10-r7.1/temp$
ls -al /home/leon/sandbox/gtd100/openembedded/tmp/work/ppce500v2-angstrom-linux-gnuspe/eglibc-2.10-r7.1/image/usr/lib/

-rw-r--r-- 1 leon leon   23002 2009-10-15 15:10 Scrt1.o
drwx------ 2 leon leon   40960 2009-10-15 15:37 stGPyioZ
-rw------- 1 leon leon       0 2009-10-15 15:26 stknPu33


Is it that the do_install() is racing with do_stage() here?


Must we add a task dependency to prevent concurrent tasking here?

Regards,
-- 
Leon




More information about the Openembedded-devel mailing list