Comment 3 for bug 1279620

Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

OK, so it's definitely signal handling: for whatever reason, signals are not being executed on the stack requested via sigaltstack. Sooner or later, one gets executed where writing to the stack causes real problems.

You can make this happen a LOT more frequently by invoking "touch" instead of whatever program go is running, this sort of thing in build.go:runOut:

+ ncl := []string{"touch"}
+ for i, c := range cmdline {
+ if c == "-o" || c == "cru" {
+ f := cmdline[i+1]
+ if f[0] != '/' { f = dir + "/" + f }
+ ncl = append(ncl, f)
+ }
+ }
+ cmdline = ncl

So I'm suspecting a kernel bug now. The go runtime uses getcontext/makecontext/setcontext a lot and something must be getting confused.