Russ Cox [Wed, 2 May 2012 20:22:56 +0000 (16:22 -0400)]
cmd/cc: add PREFETCH built-in (like SET, USED)
This makes it possible to inline the prefetch of upcoming
memory addresses during garbage collection, instead of
needing to flush registers, make a function call, and
reload registers. On garbage collection-heavy workloads,
this results in a 5% speedup.
Fixes #3493.
R=dvyukov, ken, r, dave
CC=golang-dev
https://golang.org/cl/5990066
Marcel van Lohuizen [Wed, 2 May 2012 15:01:41 +0000 (17:01 +0200)]
exp/locale/collate: fixed two bugs uncovered by regression tests.
The first bug was that tertiary ignorables had the same colElem as
implicit colElems, yielding unexpected results. The current encoding
ensures that a non-implicit colElem is never 0. This fix uncovered
another bug of the trie that indexed incorrectly into the null block.
This was caused by an unfinished optimization that would avoid the
need to max out the most-significant bits of continuation bytes.
This bug was also present in the trie used in exp/norm and has been
fixed there as well. The appearence of the bug was rare, as the lower
blocks happened to be nearly nil.
David Symonds [Tue, 1 May 2012 01:33:25 +0000 (11:33 +1000)]
misc/dashboard/codereview: send mail immediately, and fill in time.Time fields.
If we delay the mail sending, we can't send as the current user.
If we don't fill in the time.Time fields, datastore.Put will fail
because the zero time.Time value is out of its range.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6136053
Nigel Tao [Tue, 1 May 2012 00:51:34 +0000 (10:51 +1000)]
compress/flate: optimize history-copy decoding.
The forwardCopy function could be re-written in asm, and the copyHuff
method could probably be rolled into huffmanBlock and copyHist, but
I'm leaving those changes for future CLs.
Wall time for Denis Cheremisov's PNG-decoding program given in
https://groups.google.com/group/golang-nuts/browse_thread/thread/22aa8a05040fdd49
Before: 3.07s
After: 2.32s
Delta: -24%
Shenghou Ma [Mon, 30 Apr 2012 19:55:07 +0000 (15:55 -0400)]
runtime: give proper messages when user defined DYLD_INSERT_LIBRARIES on Darwin
also gives clear error when bsdthread_register fails on Darwin
Fixes #2992.
Dave Cheney [Sun, 29 Apr 2012 10:41:13 +0000 (20:41 +1000)]
compress/flate: add Encoder/Decoder benchmarks
In CL 6127051, nigeltao suggested that further gains
were possible by improving the performance of flate.
This CL adds a set of benchmarks (based on compress/lzw)
that can be used to judge any future improvements.
Dave Cheney [Fri, 27 Apr 2012 12:17:08 +0000 (22:17 +1000)]
net: consolidate common socket functions
In resolving 3507, the fix had to be applied individually to
the four *Conn types, tcp, udp, rawip and unix, due to the
duplicate code in each Conn type.
This CL consolidates the common net.Conn methods that all four
*Conn types implement into a base conn type.
Pros:
* The fix for 3507 would have only needed to be applied to one
method. Further improvements, such as possibly removing the
c.fd != nil check in c.ok(), would benefit from this CL.
* Nearly 300 lines removed from the net package.
* The public interface and documentation are not changed.
* I think this is an excellent example of the power of embedding.
Cons:
* The net package is already distributed over many files, this
CL adds another place to look.
* The fix for 3507 was a total of 16 lines changed, this follow
up CL could be considered to be an overreaction as new Conn types
are unlikely to be added in the near future.
The new logic is "use go1 if it's there, otherwise no tag."
Nothing needs to say "I require go1.0.1", and I want to
preserve some flexibility in defining what tags mean.
Right now (before go1.0.1) there is only one possible tag,
"go1", and I'd like to keep it that way.
Anthony Martin [Thu, 26 Apr 2012 09:59:13 +0000 (02:59 -0700)]
syscall: fix a number of exec bugs on Plan 9
1. Readdirnames was erroneously returning an
empty slice on every invocation.
2. The logic for determining which files to
close before exec was incorrect. If the
set of files to be kept open (provided by
the caller) did not include the files
opened at startup, those files would be
accidentally closed.
I also cleaned up readdupdevice while I was
in the vicinity.
Joel Sing [Wed, 25 Apr 2012 14:08:02 +0000 (00:08 +1000)]
runtime: use __tfork() syscall on openbsd
Switch from using the rfork() syscall on OpenBSD, to the __tfork()
syscall. The __tfork() syscall is the preferred way of creating
system threads and the rfork() syscall has recently been removed.
Note: this will break compatibility with OpenBSD releases prior to 5.1.
exp/locale/collate: Added skeleton for the higher-level types to provide
context for change lists of lower-level types. The public APIs are defined
in builder.go and collate.go. Type table is the glue between the lower and
higher level code and might be a good starting point for understanding the
collation code.
R=r, r
CC=golang-dev
https://golang.org/cl/5999053
exp/locale/collate: added trie for associating colElems to runes.
The trie code looks a lot like the trie in exp/norm. It uses different
types, however. Also, there is only a lookup for []byte and the unsafe
lookup methods have been dropped, as well as sparse mode.
There is now a method for generating a trie. To output Go code, one now needs
to first generate a trie and then call print() on it.
exp/locale/collate: implementation of trie that is used for detecting contractions.
(See http://www.unicode.org/reports/tr10/#Contractions.) Each rune that is at the
start of any contraction is associated a trie. This trie, in turn, may be shared
by other runes that have the same set of suffixes.
R=r, r
CC=golang-dev
https://golang.org/cl/5970066
Rob Pike [Wed, 25 Apr 2012 02:14:38 +0000 (12:14 +1000)]
vet: check values for named constants as well as literals.
As in:
const format = "%s"
fmt.Printf(format, "hi")
Also fix a couple of bugs by rewriting the routine.
Andrew Balholm [Wed, 25 Apr 2012 00:49:27 +0000 (10:49 +1000)]
exp/html: adjust inTableIM to match spec
Don't foster-parent text nodes that consist only of whitespace.
(I implemented this entirely in inTableIM instead of creating an
inTableTextIM, because the sole purpose of inTableTextIM seems to be
to combine character tokens into a string, which our tokenizer does
already.)
Use parseImpliedToken to clarify a couple of cases.
mime/multipart: report io.EOF correctly on part ending without newlines
If a part ends with "--boundary--", without a final "\r\n",
that's also a graceful EOF, and we should return io.EOF instead
of the fmt-wrapped io.EOF from bufio.Reader.ReadSlice.
I found this bug parsing an image attachment from gmail.
Minimal test case stripped down from the original
gmail-generated attachment included.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6118043
This changes the misc/dist program to generate OS X
packages using pkgbuild and productbuild.
The productbuild utility makes it easy to generate
packages with a custom Distribution file. This allows
us to add an installcheck script that presents a
friendly message to users who are running on an old
version of Mac OS X.
The change also fixes a few issues with the
postinstall script:
- In-repo version of the script has been made
executable. Installers generated using the new
tools couldn't execute it otherwise.
- It now uses -d for checking for the existence
of the Xcode specs directory.
- The call to sudo.bash has been dropped since cov
and prof aren't bundled with the binary
distributions.
Rob Pike [Mon, 23 Apr 2012 05:39:02 +0000 (15:39 +1000)]
text/template: detect unexported fields better
Moves the error detection back into execution, where it used to be,
and improves the error message.
Rolls back most of 6009048, which broke lower-case keys in maps.
If it weren't for maps we could detect this at compile time rather than
execution time.
Dave Cheney [Sat, 21 Apr 2012 00:01:32 +0000 (10:01 +1000)]
net: fix race between Close and Read
Fixes #3507.
Applied the suggested fix from rsc. If the connection
is in closing state then errClosing will bubble up to
the caller.
The fix has been applied to udp, ip and unix as well as
their code path include nil'ing c.fd on close. Func
tests are available in the linked issue that verified
the bug existed there as well.
Ian Lance Taylor [Fri, 20 Apr 2012 18:36:06 +0000 (11:36 -0700)]
runtime: disable memory profiler in gc_test
This lets the test pass on PPC64 GNU/Linux, which uses a much
larger page size and thus uses more memory to hold blocks
allocated for memory profiling.
net/http/httputil: Made reverseproxy test less flaky.
The reverseproxy test depended on the behavior of
runtime.NumGoroutines(), which makes no guarantee when
goroutines are reaped. Instead, modify the flushLoop()
to invoke a callback when it returns, so the exit
from the loop can be tested, instead of the number
of gorountines running.