Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/go, runtime: strace shows futex failing with EAGAIN #12132

Closed
roastercode opened this issue Aug 13, 2015 · 2 comments
Closed

cmd/go, runtime: strace shows futex failing with EAGAIN #12132

roastercode opened this issue Aug 13, 2015 · 2 comments

Comments

@roastercode
Copy link

Hello Gophers!

Here is a (partial) strace (the file stringer.go is just for the test and comes from the tour.golang.org)

aurelien@iceberg:~/go/src/github.com/4ur3l13n/go/test$ strace go run stringer.go
execve("/usr/bin/go", ["go", "run", "stringer.go"], [/* 35 vars */]) = 0
brk(0) = 0x1ebe000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3

The code run fine, but the strace give that error

  • (many times)

futex(0xc2080207d8, FUTEX_WAKE, 1) = 1
futex(0xa8fb98, FUTEX_WAIT, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0xc2080207d8, FUTEX_WAKE, 1) = 1

futex(0xc2080207d8, FUTEX_WAKE, 1) = 1
stat("/home/aurelien/go/bin/gccgo", 0xc208072090) = -1 ENOENT (No such file or directory)
stat("/home/aurelien/go/bin/gccgo", 0xc208072120) = -1 ENOENT (No such file or directory)
stat("/home/aurelien/go/bin/gccgo", 0xc2080721b0) = -1 ENOENT (No such file or directory)
stat("/home/aurelien/go/bin/gccgo", 0xc208072240) = -1 ENOENT (No such file or directory)
stat("/usr/local/sbin/gccgo", 0xc2080722d0) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/gccgo", 0xc208072360) = -1 ENOENT (No such file or directory)
stat("/usr/bin/gccgo", 0xc2080723f0) = -1 ENOENT (No such file or directory)
stat("/usr/lib/jvm/default/bin/gccgo", 0xc208072480) = -1 ENOENT (No such file or directory)
stat("/usr/bin/site_perl/gccgo", 0xc208072510) = -1 ENOENT (No such file or directory)
stat("/usr/bin/vendor_perl/gccgo", 0xc2080725a0) = -1 ENOENT (No such file or directory)
stat("/usr/bin/core_perl/gccgo", 0xc208072630) = -1 ENOENT (No such file or directory)
stat("/usr/lib/go", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0

But the codes run

unlink("/tmp/go-build761553309/command-line-arguments/_obj") = -1 EISDIR (Is a directory)
rmdir("/tmp/go-build761553309/command-line-arguments/_obj") = -1 ENOTEMPTY (Directory not empty)
lstat("/tmp/go-build761553309/command-line-arguments/_obj", {st_mode=S_IFDIR|0755, st_size=60, ...}) = 0
open("/tmp/go-build761553309/command-line-arguments/_obj", O_RDONLY|O_CLOEXEC) = 5
getdents64(5, /* 3 entries /, 4096) = 72
getdents64(5, /
0 entries _/, 4096) = 0
unlink("/tmp/go-build761553309/command-line-arguments/_obj/exe") = -1 EISDIR (Is a directory)
rmdir("/tmp/go-build761553309/command-line-arguments/_obj/exe") = -1 ENOTEMPTY (Directory not empty)
lstat("/tmp/go-build761553309/command-line-arguments/_obj/exe", {st_mode=S_IFDIR|0755, st_size=60, ...}) = 0
open("/tmp/go-build761553309/command-line-arguments/obj/exe", O_RDONLY|O_CLOEXEC) = 6
getdents64(6, /
3 entries /, 4096) = 80
getdents64(6, /
0 entries _/, 4096) = 0
unlink("/tmp/go-build761553309/command-line-arguments/obj/exe/stringer") = 0
getdents64(6, /
0 entries _/, 4096) = 0
close(6) = 0
unlink("/tmp/go-build761553309/command-line-arguments/_obj/exe") = -1 EISDIR (Is a directory)
rmdir("/tmp/go-build761553309/command-line-arguments/obj/exe") = 0
getdents64(5, /
0 entries _/, 4096) = 0
close(5) = 0
unlink("/tmp/go-build761553309/command-line-arguments/_obj") = -1 EISDIR (Is a directory)
rmdir("/tmp/go-build761553309/command-line-arguments/obj") = 0
getdents64(4, /
0 entries /, 4096) = 0
close(4) = 0
unlink("/tmp/go-build761553309/command-line-arguments") = -1 EISDIR (Is a directory)
rmdir("/tmp/go-build761553309/command-line-arguments") = 0
getdents64(3, /
0 entries */, 4096) = 0
close(3) = 0
unlink("/tmp/go-build761553309") = -1 EISDIR (Is a directory)
rmdir("/tmp/go-build761553309") = 0
exit_group(0) = ?
+++ exited with 0 +++
aurelien@iceberg:~/go/src/github.com/4ur3l13n/go/test$ go run stringer.go
Arthur Dent (42 years) Zaphod Beeblebrox (9001 years)

A last point a: $ gdb go run stringer.go

give :

Line number 724 out of range; /usr/lib/go/src/cmd/go/main.go has 723 lines

The point is that, every time I make a gdb on a (working) code it give me back that, any reason?

AD

@ianlancetaylor
Copy link
Contributor

Please ask questions on the mailing list (golang-nuts@googlegroups.com), not on the issue tracker.

I'm not sure I really understand what you are asking. I think you are asking why strace shows things like futex failing with EAGAIN. The answer to that is: that's how futexes work. See the man page.

@roastercode
Copy link
Author

Ok, sorry for the disturb (I also use the mailing list)
The question and the trace was not well formed and I find part of the response by installing gcc-go rather than go (that have solved the trouble of no such file or directory in the strace.

@mikioh mikioh changed the title Strace give back error on go (?) gccgo: Strace give back error on go (?) Aug 13, 2015
@mikioh mikioh changed the title gccgo: Strace give back error on go (?) cmd/go, runtime: strace shows futex failing with EAGAIN Aug 13, 2015
@golang golang locked and limited conversation to collaborators Aug 22, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants