--
Lorenzo Stoakes
http://www.codegrunt.co.uk
Potentially; I am briefly using a mac where this problem does *not*
arise, once I am back on the linux box I shall investigate :) - I'd
certainly be surprised if it was the -Werror change, as that seems
unrelated.
Cheers, Lorenzo
Is NFS involved when the problem occurs?
AGL
No, 'vboxsf' - I am running linux in a virtualbox vm and the go folder
is sat in a shared folder from the host system, which itself is sat in
a truecrypt volume, so it's pretty sloooow.
uname -a gives:-
Linux loki 2.6.35-28-generic #49-Ubuntu SMP Tue Mar 1 14:40:58 UTC 2011 i686 GNU
/Linux
I will try the revision before the CL Peter mentions. 165b8254aee1
does *not* build for me.
What do you mean by "seems to"? Does the build stop or not?
It does appear that the build is now removing build.out
while it is still open for reading, but that is typically allowed
by Unix file systems. Even if it produced an error, the
command that is doing the remove is rm -f, which should
still exit successfully in that case.
Russ
Sorry I meant to say that that seems to be the *cause* of the build
failing - yes the build does stop.
>
> It does appear that the build is now removing build.out
> while it is still open for reading, but that is typically allowed
> by Unix file systems. Even if it produced an error, the
> command that is doing the remove is rm -f, which should
> still exit successfully in that case.
This could be a peculiarity of vboxsf (virtual box shared folder), I
even tried alias rm='rm -f' with no effect (before I knew the build
used -f anyway).I will try copying the folder to a non-shared folder
and building.
This worked; clearly related to vboxsf. Very strange; this seems to be
a known issue with vboxsf, however -
http://askubuntu.com/questions/22824/cant-modify-files-in-my-shared-folder-virtualbox-guest-is-ubuntu-host-is-wind
(I am using a windows host on this box)
Russ
%%%% making pkg %%%%
make: Entering directory `/home/lorenzo/Dropbox/code/go/src/pkg'
install runtime
install sync/atomic
install unicode
install math
INSTALL FAIL sync/atomic
make[1]: Entering directory `/home/lorenzo/Dropbox/code/go/src/pkg/sync/atomic'
8g -o _go_.8 doc.go
8a asm_386.s
rm -f _obj/sync/atomic.a
gopack grc _obj/sync/atomic.a _go_.8 asm_386.8
cp _obj/sync/atomic.a
"/home/lorenzo/Dropbox/code/go/pkg/linux_386/sync/atomic.a"
rm -rf *.o *.a *.[568vq] [568vq].out *.so _obj _test _testmain.go
*.exe _cgo* *.cgo[12].* test.out build.out
rm: cannot remove `build.out': Text file busy
make[1]: *** [install.clean] Error 1
make[1]: Leaving directory `/home/lorenzo/Dropbox/code/go/src/pkg/sync/atomic'
make: *** [sync/atomic.install] Error 1
make: *** Waiting for unfinished jobs....
INSTALL FAIL unicode
make[1]: Entering directory `/home/lorenzo/Dropbox/code/go/src/pkg/unicode'
8g -o _go_.8 casetables.go digit.go letter.go tables.go
rm -f _obj/unicode.a
gopack grc _obj/unicode.a _go_.8
cp _obj/unicode.a "/home/lorenzo/Dropbox/code/go/pkg/linux_386/unicode.a"
rm -rf *.o *.a *.[568vq] [568vq].out *.so _obj _test _testmain.go
*.exe _cgo* *.cgo[12].* test.out build.out maketables
rm: cannot remove `build.out': Text file busy
make[1]: *** [install.clean] Error 1
make[1]: Leaving directory `/home/lorenzo/Dropbox/code/go/src/pkg/unicode'
make: *** [unicode.install] Error 1
INSTALL FAIL math
make[1]: Entering directory `/home/lorenzo/Dropbox/code/go/src/pkg/math'
8g -o _go_.8 acosh.go asinh.go atanh.go bits.go cbrt.go const.go
copysign.go erf.go exp_port.go fdim.go gamma.go hypot_port.go j0.go
j1.go jn.go lgamma.go logb.go nextafter.go pow.go pow10.go signbit.go
sinh.go sqrt_port.go tanh.go unsafe.go asin_decl.go atan_decl.go
atan2_decl.go exp_decl.go exp2_decl.go expm1_decl.go fabs_decl.go
floor_decl.go frexp_decl.go fmod_decl.go hypot_decl.go ldexp_decl.go
log_decl.go log10_decl.go log1p_decl.go modf_decl.go remainder_decl.go
sin_decl.go sincos_decl.go sqrt_decl.go tan_decl.go
8a asin_386.s
8a atan_386.s
8a atan2_386.s
8a exp_386.s
8a exp2_386.s
8a expm1_386.s
8a fabs_386.s
8a floor_386.s
8a frexp_386.s
8a fmod_386.s
8a hypot_386.s
8a ldexp_386.s
8a log_386.s
8a log10_386.s
8a log1p_386.s
8a modf_386.s
8a remainder_386.s
8a sin_386.s
8a sincos_386.s
8a sqrt_386.s
8a tan_386.s
rm -f _obj/math.a
gopack grc _obj/math.a _go_.8 asin_386.8 atan_386.8 atan2_386.8
exp_386.8 exp2_386.8 expm1_386.8 fabs_386.8 floor_386.8 frexp_386.8
fmod_386.8 hypot_386.8 ldexp_386.8 log_386.8 log10_386.8 log1p_386.8
modf_386.8 remainder_386.8 sin_386.8 sincos_386.8 sqrt_386.8 tan_386.8
cp _obj/math.a "/home/lorenzo/Dropbox/code/go/pkg/linux_386/math.a"
rm -rf *.o *.a *.[568vq] [568vq].out *.so _obj _test _testmain.go
*.exe _cgo* *.cgo[12].* test.out build.out
rm: cannot remove `build.out': Text file busy
make[1]: *** [install.clean] Error 1
make[1]: Leaving directory `/home/lorenzo/Dropbox/code/go/src/pkg/math'
make: *** [math.install] Error 1
INSTALL FAIL runtime
make[1]: Entering directory `/home/lorenzo/Dropbox/code/go/src/pkg/runtime'
cp runtime.h "/home/lorenzo/Dropbox/code/go/pkg/linux_386/runtime.h"
cp cgocall.h "/home/lorenzo/Dropbox/code/go/pkg/linux_386/cgocall.h"
quietgcc -o mkversion -I "/home/lorenzo/Dropbox/code/go/include"
mkversion.c "/home/lorenzo/Dropbox/code/go/lib/lib9.a"
(echo 'package runtime'; echo 'const theGoos = "linux"') >version_linux.go
(echo 'package runtime'; echo 'const theGoarch = "386"') >version_386.go
CC="8c" CFLAGS="-Ilinux -I386 -Ilinux/386 -wF " ./mkgodefs.sh proc.c
iface.c hashmap.c chan.c > runtime_defs.go.x
mv -f runtime_defs.go.x runtime_defs.go
8c -Ilinux -I386 -Ilinux/386 -wF -a proc.c >runtime.acid.386
quietgcc -o goc2c goc2c.c
8c -Ilinux -I386 -Ilinux/386 -wF amd64/traceback.c
GOROOT="/home/lorenzo/Dropbox/code/go" ./mkversion >version.go
./mkasmh.sh >386/asm.h.x
mv -f 386/asm.h.x 386/asm.h
8g -+ -o _go_.8 debug.go error.go extern.go mem.go sig.go
softfloat64.go type.go version.go version_linux.go version_386.go
runtime_defs.go
8a 386/asm.s
8c -Ilinux -I386 -Ilinux/386 -wF -o "cgocall.8" cgocall.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "chan.8" chan.c
8c -Ilinux -I386 -Ilinux/386 -wF 386/closure.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "cpuprof.8" cpuprof.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "float.8" float.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "complex.8" complex.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "hashmap.8" hashmap.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "iface.8" iface.c
./goc2c "`pwd`/malloc.goc" > malloc.c.tmp
8c -Ilinux -I386 -Ilinux/386 -wF -o "mcache.8" mcache.c
mv -f malloc.c.tmp malloc.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "mcentral.8" mcentral.c
8c -Ilinux -I386 -Ilinux/386 -wF linux/mem.c
8a 386/memmove.s
8c -Ilinux -I386 -Ilinux/386 -wF -o "mfinal.8" mfinal.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "mfixalloc.8" mfixalloc.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "mgc0.8" mgc0.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "mheap.8" mheap.c
./goc2c "`pwd`/mprof.goc" > mprof.c.tmp
8c -Ilinux -I386 -Ilinux/386 -wF -o "msize.8" msize.c
mv -f mprof.c.tmp mprof.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "print.8" print.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "proc.8" proc.c
./goc2c "`pwd`/reflect.goc" > reflect.c.tmp
8c -Ilinux -I386 -Ilinux/386 -wF -o "rune.8" rune.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "runtime.8" runtime.c
mv -f reflect.c.tmp reflect.c
./goc2c "`pwd`/runtime1.goc" > runtime1.c.tmp
8a linux/386/rt0.s
./goc2c "`pwd`/sema.goc" > sema.c.tmp
8c -Ilinux -I386 -Ilinux/386 -wF linux/386/signal.c
mv -f runtime1.c.tmp runtime1.c
./goc2c "`pwd`/sigqueue.goc" > sigqueue.c.tmp
mv -f sema.c.tmp sema.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "slice.8" slice.c
./goc2c "`pwd`/string.goc" > string.c.tmp
8c -Ilinux -I386 -Ilinux/386 -wF -o "symtab.8" symtab.c
mv -f sigqueue.c.tmp sigqueue.c
8a linux/386/sys.s
mv -f string.c.tmp string.c
8c -Ilinux -I386 -Ilinux/386 -wF linux/thread.c
8a 386/vlop.s
8c -Ilinux -I386 -Ilinux/386 -wF 386/vlrt.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "malloc.8" malloc.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "mprof.8" mprof.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "reflect.8" reflect.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "runtime1.8" runtime1.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "sema.8" sema.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "sigqueue.8" sigqueue.c
8c -Ilinux -I386 -Ilinux/386 -wF -o "string.8" string.c
rm -f _obj/runtime.a
gopack grc _obj/runtime.a _go_.8 asm.8 cgocall.8 chan.8 closure.8
cpuprof.8 float.8 complex.8 hashmap.8 iface.8 malloc.8 mcache.8
mcentral.8 mem.8 memmove.8 mfinal.8 mfixalloc.8 mgc0.8 mheap.8 mprof.8
msize.8 print.8 proc.8 reflect.8 rune.8 runtime.8 runtime1.8 rt0.8
sema.8 signal.8 sigqueue.8 slice.8 string.8 symtab.8 sys.8 thread.8
traceback.8 vlop.8 vlrt.8
cp _obj/runtime.a "/home/lorenzo/Dropbox/code/go/pkg/linux_386/runtime.a"
rm -rf *.o *.a *.[568vq] [568vq].out version.go version_*.go *.so _obj
_test _testmain.go *.exe _cgo* *.cgo[12].* test.out build.out
rm: cannot remove `build.out': Text file busy
make[1]: *** [install.clean] Error 1
rm reflect.c string.c sema.c sigqueue.c runtime1.c malloc.c mprof.c
make[1]: Leaving directory `/home/lorenzo/Dropbox/code/go/src/pkg/runtime'
make: *** [runtime.install] Error 1
make: Leaving directory `/home/lorenzo/Dropbox/code/go/src/pkg'
rm -rf build.out >build.out
echo $?
Are you able to demonstrate the build failure outside a path that is monitored by some sort of external file sync tool?
Cheers
Dave
Sent from my C64
lorenzo@loki:/home/lorenzo/Dropbox/code/go/src/cmd$ rm -rf build.out>build.out
rm: cannot remove `build.out': Text file busy
lorenzo@loki:/home/lorenzo/Dropbox/code/go/src/cmd$ echo $?
1
I will try this and get back to you.
Tried it out - still fails. Looks like it's definitely vboxsf.
I've submitted a trivial CL for this at http://codereview.appspot.com/4412045
Cheers, Lorenzo
> It does appear that the build is now removing build.out
> while it is still open for reading, but that is typically allowed
> by Unix file systems. Even if it produced an error, the
> command that is doing the remove is rm -f, which should
> still exit successfully in that case.
I believe POSIX says that rm -f must exit successfully if the file does
not exist, but that if the file exists but removing it fails, rm is
supposed to exit with a failure status. That is, -f means ignore ENOENT
but does not mean ignore other errors.
Ian
> I believe POSIX says that rm -f must exit successfully if the file does
> not exist, but that if the file exists but removing it fails, rm is
> supposed to exit with a failure status. That is, -f means ignore ENOENT
> but does not mean ignore other errors.
I believe the error here is ETXTBSY, hence it not being ignored.