- 16 Jan, 2014 9 commits
-
-
Keith Randall authored
Reflect used to communicate to the runtime using interface words, which is bad for precise GC because sometimes iwords hold a pointer and sometimes they don't. This change rewrites channel and select operations to always pass pointers to the runtime. reflect.Select gets somewhat more expensive, as we now do an allocation per receive case instead of one allocation whose size is the max of all the received types. This seems unavoidable to get preciseness (unless we move the allocation into selectgo, which is a much bigger change). Fixes #6490 R=golang-codereviews, dvyukov, rsc CC=golang-codereviews https://golang.org/cl/52900043
-
Brad Fitzpatrick authored
Status codes 204, 304, and 1xx don't allow bodies. We already had a function for this, but we were hard-coding just 304 (StatusNotModified) in a few places. Use the function instead, and flesh out tests for all codes. Fixes #6685 R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/53290044
-
Kamil Kisiel authored
R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/8274046
-
Brad Fitzpatrick authored
Apparently this is expensive on Windows. Fixes #7020 R=golang-codereviews, alex.brainman, mattn.jp, dvyukov CC=golang-codereviews https://golang.org/cl/52840043
-
Rob Pike authored
We forgot to include the width of "0x" when computing the crossover from internal buffer to allocated buffer. Also add a helper function to the test for formatting large zero-padded test strings. Fixes #6777. R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/50820043
-
Russ Cox authored
This CL makes the bitmaps a little more precise about variables that have their address taken but for which the address does not escape to the heap, so that the variables are kept in the stack frame rather than allocated on the heap. The code before this CL handled these variables by treating every return statement as using every such variable and depending on liveness analysis to essentially treat the variable as live during the entire function. That approach has false positives and (worse) false negatives. That is, it's both sloppy and buggy: func f(b1, b2 bool) { // x live here! (sloppy) if b2 { print(0) // x live here! (sloppy) return } var z **int x := new(int) *x = 42 z = &x print(**z) // x live here (conservative) if b2 { print(1) // x live here (conservative) return } for { print(**z) // x not live here (buggy) } } The first two liveness annotations (marked sloppy) are clearly wrong: x cannot be live if it has not yet been declared. The last liveness annotation (marked buggy) is also wrong: x is live here as *z, but because there is no return statement reachable from this point in the code, the analysis treats x as dead. This CL changes the liveness calculation to mark such variables live exactly at points in the code reachable from the variable declaration. This keeps the conservative decisions but fixes the sloppy and buggy ones. The CL also detects ambiguously live variables, those that are being marked live but may not actually have been initialized, such as in this example: func f(b1 bool) { var z **int if b1 { x := new(int) *x = 42 z = &x } else { y := new(int) *y = 54 z = &y } print(**z) // x, y live here (conservative) } Since the print statement is reachable from the declaration of x, x must conservatively be marked live. The same goes for y. Although both x and y are marked live at the print statement, clearly only one of them has been initialized. They are both "ambiguously live". These ambiguously live variables cause problems for garbage collection: the collector cannot ignore them but also cannot depend on them to be initialized to valid pointer values. Ambiguously live variables do not come up too often in real code, but recent changes to the way map and interface runtime functions are invoked has created a large number of ambiguously live compiler-generated temporary variables. The next CL will adjust the analysis to understand these temporaries better, to make ambiguously live variables fairly rare. Once ambiguously live variables are rare enough, another CL will introduce code at the beginning of a function to zero those slots on the stack. At that point the garbage collector and the stack copying routines will be able to depend on the guarantee that if a slot is marked as live in a liveness bitmap, it is initialized. R=khr CC=golang-codereviews, iant https://golang.org/cl/51810043
-
Russ Cox authored
Missed this case in CL 51010045. TBR=khr CC=golang-codereviews https://golang.org/cl/53200043
-
Dmitriy Vyukov authored
Example of output: goroutine 4 [sleep for 3 min]: time.Sleep(0x34630b8a000) src/pkg/runtime/time.goc:31 +0x31 main.func·002() block.go:16 +0x2c created by main.main block.go:17 +0x33 Full program and output are here: http://play.golang.org/p/NEZdADI3Td Fixes #6809. R=golang-codereviews, khr, kamil.kisiel, bradfitz, rsc CC=golang-codereviews https://golang.org/cl/50420043
-
Dmitriy Vyukov authored
Use lock-free fixed-size ring for work queues instead of an unbounded mutex-protected array. The ring has single producer and multiple consumers. If the ring overflows, work is put onto global queue. benchmark old ns/op new ns/op delta BenchmarkMatmult 7 5 -18.12% BenchmarkMatmult-4 2 2 -18.98% BenchmarkMatmult-16 1 0 -12.84% BenchmarkCreateGoroutines 105 88 -16.10% BenchmarkCreateGoroutines-4 376 219 -41.76% BenchmarkCreateGoroutines-16 241 174 -27.80% BenchmarkCreateGoroutinesParallel 103 87 -14.66% BenchmarkCreateGoroutinesParallel-4 169 143 -15.38% BenchmarkCreateGoroutinesParallel-16 158 151 -4.43% R=golang-codereviews, rsc CC=ddetlefs, devon.odell, golang-codereviews https://golang.org/cl/46170044
-
- 15 Jan, 2014 7 commits
-
-
Keith Randall authored
Give proper types to the argument/return areas allocated for reflect calls. Avoid use of iword to manipulate receivers, which may or may not be pointers. Update #6490 R=rsc CC=golang-codereviews https://golang.org/cl/52110044
-
Brad Fitzpatrick authored
Update #7121 R=golang-codereviews, gobot, dsymonds CC=golang-codereviews https://golang.org/cl/51750044
-
Robert Griesemer authored
Generally improve error messages for escape sequences. R=adonovan CC=golang-codereviews https://golang.org/cl/49430046
-
Rob Pike authored
Replace the pack command, a C program, with a clean reimplementation in Go. It does not need to reproduce the full feature set and it is no longer used by the build chain, but has a role in looking inside archives created by the build chain directly. Since it's not in C, it is no longer build by dist, so remove it from cmd/dist and make it a "tool" in cmd/go terminology. Fixes #2705 R=rsc, dave, minux.ma, josharian CC=golang-codereviews https://golang.org/cl/52310044
-
Dmitriy Vyukov authored
Fixes #5139. Update #7065. R=golang-codereviews, bradfitz, minux.ma CC=golang-codereviews https://golang.org/cl/52090045
-
Brad Fitzpatrick authored
Fixes #6564 R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/52420043
-
Shenghou Ma authored
See also discussion in CL 51010045. R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/52230043
-
- 14 Jan, 2014 22 commits
-
-
Rob Pike authored
R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/52360044
-
Rob Pike authored
Make it clear that if you do a . import, you cannot use a qualified identifier. R=gri CC=golang-codereviews https://golang.org/cl/52390043
-
Rob Pike authored
R=rsc, iant CC=golang-codereviews https://golang.org/cl/52360043
-
Keith Randall authored
R=golang-codereviews, minux.ma CC=golang-codereviews https://golang.org/cl/52310043
-
Michael Kelly authored
Previously, filenames containing special characters could: 1) Escape the <a> tag, with a file called something like: ">foo 2) Break the links in the index by prematurely ending the path portion of the url, with a file called: foo?bar In order to avoid a forbidden dependency on the html package, I'm using htmlReplacer from net/http/server.go, which is equivalent to html.EscapeString. This change also expands fakeFile.Readdir to better emulate os.File.Readdir. R=golang-codereviews, rsc, gobot, bradfitz, josharian, mikioh.mikioh CC=golang-codereviews https://golang.org/cl/37440043
-
Josh Bleecher Snyder authored
Map iteration previously started from a random bucket, but walked each bucket from the beginning. Now, iteration always starts from the first bucket and walks each bucket starting at a random offset. For performance, the random offset is selected at the start of iteration and reused for each bucket. Iteration over a map with 8 or fewer elements--a single bucket--will now be non-deterministic. There will now be only 8 different possible map iterations. Significant benchmark changes, on my OS X laptop (rough but consistent): benchmark old ns/op new ns/op delta BenchmarkMapIter 128 121 -5.47% BenchmarkMapIterEmpty 4.26 4.45 +4.46% BenchmarkNewEmptyMap 114 111 -2.63% Fixes #6719. R=khr, bradfitz CC=golang-codereviews https://golang.org/cl/47370043
-
Brad Fitzpatrick authored
Still work to do. See http://golang.org/issue/7125 ««« original CL description net/http/cookiejar: document format of domain in PublicSuffix Document what values a PublicSuffixList must accept as a domain in a call to PublicSuffix. R=bradfitz, nigeltao CC=golang-codereviews https://golang.org/cl/47560044 »»» R=golang-codereviews, minux.ma CC=golang-codereviews https://golang.org/cl/51770044
-
Brad Fitzpatrick authored
R=golang-codereviews, iant, mjk CC=golang-codereviews https://golang.org/cl/52220043
-
Brad Fitzpatrick authored
R=golang-codereviews, minux.ma CC=golang-codereviews https://golang.org/cl/52240043
-
Brad Fitzpatrick authored
Having these flags misleads people into thinking they're acceptable for code that "must be gofmt'd". If an organization wishes to use gofmt internally with different settings, they can fork gofmt trivially. But "gofmt" as used by the community with open source Go code should not support these old knobs. Also removes the -comments flag. Fixes #7101 R=r, gri CC=golang-codereviews https://golang.org/cl/52170043
-
Brad Fitzpatrick authored
Now with more syscall! R=golang-codereviews, minux.ma CC=golang-codereviews https://golang.org/cl/52150043
-
Brad Fitzpatrick authored
Fix another issue (similar to Issue 6995) where there was a data race when sharing a server handler's Request.Body with another goroutine that out-lived the Handler's goroutine. In some cases we were not closing the incoming Request.Body (which would've required reading it until the end) if we thought it we thought we were going to be forcibly closing the underlying net.Conn later anyway. But that optimization largely moved to the transfer.go *body later, and locking was added to *body which then detected read-after-close, so now calling the (*body).Close always is both cheap and correct. No new test because TestTransportAndServerSharedBodyRace caught it, albeit only sometimes. Running: while ./http.test -test.cpu=8 -test.run=TestTransportAndServerSharedBodyRace; do true; done ... would reliably cause a race before, but not now. Update #6995 Fixes #7092 R=golang-codereviews, khr CC=golang-codereviews https://golang.org/cl/51700043
-
Russ Cox authored
For historical reasons, temp was returning a copy of the created Node*, not the original Node*. This meant that if analysis recorded information in the returned node (for example, n->addrtaken = 1), the analysis would not show up on the original Node*, the one kept in fn->dcl and consulted during liveness bitmap creation. Correct this, and watch for it when setting addrtaken. Fixes #7083. R=khr, dave, minux.ma CC=golang-codereviews https://golang.org/cl/51010045
-
Russ Cox authored
R=khr CC=golang-codereviews https://golang.org/cl/51820043
-
Russ Cox authored
R=khr, dvyukov CC=golang-codereviews https://golang.org/cl/51830043
-
Dmitriy Vyukov authored
Void function can not return false. R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/52000043
-
Alex Brainman authored
R=golang-codereviews, dave, bradfitz CC=golang-codereviews https://golang.org/cl/51000043
-
Keith Randall authored
It's too sensitive. Fixes bug 7095 R=golang-codereviews, iant, minux.ma, rsc CC=golang-codereviews https://golang.org/cl/50470043
-
Russ Cox authored
The golden file for link.hello.darwin.amd64 was a little ahead of the checked-in code. R=iant TBR=iant CC=golang-codereviews https://golang.org/cl/51870043
-
Russ Cox authored
R=iant CC=golang-codereviews https://golang.org/cl/51470043
-
Russ Cox authored
Related changes included in this CL: - Add explicit start symbol to Prog. - Add omitRuntime bool to Prog. - Introduce p.Packages[""] to hold automatic symbols - Add SymOrder to Prog to preserve symbol order. - Add layout test (and fix bug that was putting everything in text section). R=iant CC=golang-codereviews https://golang.org/cl/51260045
-
Russ Cox authored
The hex dumps will diff better, and I hope they will avoid a repeat of http://bugs.debian.org/716853. The CL will probably show the testdata diffs as "binary", but in fact the binary versions are being replaced by textual hex dumps (output of hexdump -C). R=iant CC=golang-codereviews https://golang.org/cl/51000044
-
- 13 Jan, 2014 2 commits
-
-
Mikio Hara authored
Also fixes a dialgoogle test glitch after issue 6628 fix. R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/50660044
-
David du Colombier authored
On Plan 9, we can observe the following open file descriptors: 0 r c 0 (000000000000000a 0 00) 0 0 /dev/null 1 rw | 0 (0000000001df6742 0 00) 65536 54 #|/data1 2 rw | 0 (0000000001df6782 0 00) 65536 0 #|/data1 3 rw M 1956 (0000000000d66dd2 0 00) 8192 12 /tmp/333163398 4 r c 0 (0000000000000001 0 00) 0 528 /dev/bintime 5 r M 1956 (0000000000d66dd1 854 00) 8192 0 /tmp/go-build843954301/os/exec/_test/exec.test 6 r M 1956 (0000000000d66dd1 854 00) 8192 0 /tmp/go-build843954301/os/exec/_test/exec.test 7 r M 1956 (0000000000d66dd1 854 00) 8192 0 /tmp/go-build843954301/os/exec/_test/exec.test 8 r M 1956 (0000000000d66dd1 854 00) 8192 0 /tmp/go-build843954301/os/exec/_test/exec.test 9 r M 1956 (0000000000d66dd1 854 00) 8192 0 /tmp/go-build843954301/os/exec/_test/exec.test 10 r M 1956 (0000000000d66dd1 854 00) 8192 0 /tmp/go-build843954301/os/exec/_test/exec.test 11 r c 0 (000000000000000f 0 00) 0 32 /dev/random 12 r M 1956 (0000000000d66dd1 854 00) 8192 0 /tmp/go-build843954301/os/exec/_test/exec.test 13 r c 0 (000000000000000a 0 00) 0 0 /dev/null 14 rw | 0 (0000000001df6801 0 00) 65536 0 #|/data 15 rw | 0 (0000000001df6802 0 00) 65536 1275 #|/data1 R=rsc, bradfitz, aram CC=golang-codereviews https://golang.org/cl/51420044
-