- 28 Mar, 2011 7 commits
-
-
Ian Lance Taylor authored
With gccgo some operating systems require using select rather than epoll or kevent. Using select means that we have to wake up the polling thread each time we add a new file descriptor. This implements that in the generic code rather than adding another wakeup channel, even though nothing in the current net package uses the capability. R=rsc, iant2 CC=golang-dev https://golang.org/cl/4284069
-
Robert Griesemer authored
NewPackage creates an ast.Package node from a set of package files and resolves unresolved identifiers. Also: - Changed semantics of Scope.Insert: If an object is inserted w/o errors, the result is nil (before it was obj). - Fixed an identifier resolution bug in the parser: map keys must not be resolved. gotype runs through several go/* packages and successfully resolves all (non-field/method) identifiers. R=rog, rsc CC=golang-dev https://golang.org/cl/4298044
-
Brad Fitzpatrick authored
This speeds up strings.ToLower, etc. before/after: strings_test.BenchmarkMapNoChanges 1000000 1013 ns/op strings_test.BenchmarkMapNoChanges 5000000 442 ns/op R=r, rog, eh, rsc CC=golang-dev https://golang.org/cl/4306056
-
Luuk van Dijk authored
in gdb, 'info goroutines' and 'goroutine <n> <cmd> were crashing because the 'g' and 'm' structures had changed a bit. R=rsc CC=golang-dev https://golang.org/cl/4289077
-
Russ Cox authored
R=r CC=golang-dev https://golang.org/cl/4313051
-
Ian Lance Taylor authored
bug323.go:18:3: error: reference to undefined field or method ‘Meth’ bug323.go:19:3: error: reference to undefined field or method ‘Meth2’ R=golang-dev, rsc1 CC=golang-dev https://golang.org/cl/4280072
-
Russ Cox authored
R=adg CC=golang-dev https://golang.org/cl/4289076
-
- 27 Mar, 2011 3 commits
-
-
Alexey Borzenkov authored
On darwin amd64 it was impossible to create more that ~132 threads. While investigating I noticed that go consumes almost 1TB of virtual memory per OS thread and the reason for such a small limit of OS thread was because process was running out of virtual memory. While looking at bsdthread_create I noticed that on amd64 it wasn't using PTHREAD_START_CUSTOM. If you look at http://fxr.watson.org/fxr/source/bsd/kern/pthread_synch.c?v=xnu-1228 you will see that in that case darwin will use stack pointer as stack size, allocating huge amounts of memory for stack. This change fixes the issue and allows for creation of up to 2560 OS threads (which appears to be some Mac OS X limit) with relatively small virtual memory consumption. R=rsc CC=golang-dev https://golang.org/cl/4289075
-
Russ Cox authored
R=golang-dev, gri CC=golang-dev https://golang.org/cl/4316042
-
Ian Lance Taylor authored
bug325.go:13:10: error: invalid indirect of ‘unsafe.Pointer’ bug325.go:14:31: error: reference to field ‘foo’ in object which has no fields or methods R=golang-dev, r CC=golang-dev https://golang.org/cl/4313050
-
- 26 Mar, 2011 6 commits
-
-
Rob Pike authored
R=rsc CC=golang-dev https://golang.org/cl/4314044
-
Ian Lance Taylor authored
init.go:16:10: error: invalid reference to unexported identifier ‘runtime.init’ init.go:15:2: error: reference to undefined name ‘init’ init.go:17:10: error: reference to undefined name ‘init’ R=golang-dev, rsc1 CC=golang-dev https://golang.org/cl/4289074
-
Robert Hencke authored
R=golang-dev, r CC=golang-dev https://golang.org/cl/4279074
-
Ian Lance Taylor authored
It's been six months. R=rsc CC=golang-dev https://golang.org/cl/4289073
-
Andrew Gerrand authored
R=rsc CC=golang-dev https://golang.org/cl/4275076
-
Ian Lance Taylor authored
cmp6.go:28:9: error: incompatible types in binary expression cmp6.go:29:9: error: incompatible types in binary expression cmp6.go:40:9: error: incompatible types in binary expression cmp6.go:41:9: error: incompatible types in binary expression cmp6.go:48:9: error: expected integer, floating, complex, string, pointer, boolean, interface, slice, map, channel, or function type R=rsc, r2 CC=golang-dev https://golang.org/cl/4281071
-
- 25 Mar, 2011 19 commits
-
-
Rob Pike authored
These are the top runners. More to come. Also print two digits of timing info under -test.v. R=rsc CC=golang-dev https://golang.org/cl/4317044
-
Ian Lance Taylor authored
bug081.go:9:9: error: expected type R=rsc CC=golang-dev https://golang.org/cl/4280071
-
Dave Cheney authored
R=adg, rsc, ality CC=golang-dev https://golang.org/cl/4281069
-
Rob Pike authored
New make target "testshort" runs "gotest -test.short" and is invoked by run.bash, which is invoked by all.bash. Use -test.short to make one package (crypto ecdsa) run much faster. More changes to come. Once this is in, I will update the long-running tests to use the new flag. R=rsc CC=golang-dev https://golang.org/cl/4317043
-
Ian Lance Taylor authored
bug016.go:11:8: error: negative shift count R=rsc, gri CC=golang-dev https://golang.org/cl/4312055
-
Peter Mundy authored
R=rsc CC=golang-dev https://golang.org/cl/4314042
-
Albert Strasheim authored
R=rsc CC=golang-dev https://golang.org/cl/4298060
-
Albert Strasheim authored
R=iant, rsc, brainman CC=golang-dev https://golang.org/cl/4306042
-
Rob Pike authored
R=rsc CC=golang-dev https://golang.org/cl/4312054
-
Ian Lance Taylor authored
bug274.go:23:3: error: missing statement after label bug274.go:25:3: error: missing statement after label bug274.go:28:3: error: label ‘L2’ defined and not used R=rsc CC=golang-dev https://golang.org/cl/4273114
-
Rob Pike authored
Fixes #1615. This time for sure. R=rsc, gri CC=golang-dev https://golang.org/cl/4275079
-
Russ Cox authored
Fixes #1641. Actually it side steps the real issue, which is that the setitimer(2) implementation on OS X is not useful for profiling of multi-threaded programs. I filed the below using the Apple Bug Reporter. /* Filed as Apple Bug Report #9177434. This program creates a new pthread that loops, wasting cpu time. In the main pthread, it sleeps on a condition that will never come true. Before doing so it sets up an interval timer using ITIMER_PROF. The handler prints a message saying which thread it is running on. POSIX does not specify which thread should receive the signal, but in order to be useful in a user-mode self-profiler like pprof or gprof http://code.google.com/p/google-perftools http://www.delorie.com/gnu/docs/binutils/gprof_25.html it is important that the thread that receives the signal is the one whose execution caused the timer to expire. Linux and FreeBSD handle this by sending the signal to the process's queue but delivering it to the current thread if possible: http://lxr.linux.no/linux+v2.6.38/kernel/signal.c#L802 807 /* 808 * Now find a thread we can wake up to take the signal off the queue. 809 * 810 * If the main thread wants the signal, it gets first crack. 811 * Probably the least surprising to the average bear. 812 * / http://fxr.watson.org/fxr/source/kern/kern_sig.c?v=FREEBSD8;im=bigexcerpts#L1907 1914 /* 1915 * Check if current thread can handle the signal without 1916 * switching context to another thread. 1917 * / On those operating systems, this program prints: $ ./a.out signal on cpu-chewing looper thread signal on cpu-chewing looper thread signal on cpu-chewing looper thread signal on cpu-chewing looper thread signal on cpu-chewing looper thread signal on cpu-chewing looper thread signal on cpu-chewing looper thread signal on cpu-chewing looper thread signal on cpu-chewing looper thread signal on cpu-chewing looper thread $ The OS X kernel does not have any such preference. Its get_signalthread does not prefer current_thread(), in contrast to the other two systems, so the signal gets delivered to the first thread in the list that is able to handle it, which ends up being the main thread in this experiment. http://fxr.watson.org/fxr/source/bsd/kern/kern_sig.c?v=xnu-1456.1.26;im=excerpts#L1666 $ ./a.out signal on sleeping main thread signal on sleeping main thread signal on sleeping main thread signal on sleeping main thread signal on sleeping main thread signal on sleeping main thread signal on sleeping main thread signal on sleeping main thread signal on sleeping main thread signal on sleeping main thread $ The fix is to make get_signalthread use the same heuristic as Linux and FreeBSD, namely to use current_thread() if possible before scanning the process thread list. */ #include <sys/time.h> #include <sys/signal.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> static void handler(int); static void* looper(void*); static pthread_t pmain, ploop; int main(void) { struct itimerval it; struct sigaction sa; pthread_cond_t cond; pthread_mutex_t mu; memset(&sa, 0, sizeof sa); sa.sa_handler = handler; sa.sa_flags = SA_RESTART; memset(&sa.sa_mask, 0xff, sizeof sa.sa_mask); sigaction(SIGPROF, &sa, 0); pmain = pthread_self(); pthread_create(&ploop, 0, looper, 0); memset(&it, 0, sizeof it); it.it_interval.tv_usec = 10000; it.it_value = it.it_interval; setitimer(ITIMER_PROF, &it, 0); pthread_mutex_init(&mu, 0); pthread_mutex_lock(&mu); pthread_cond_init(&cond, 0); for(;;) pthread_cond_wait(&cond, &mu); return 0; } static void handler(int sig) { static int nsig; pthread_t p; p = pthread_self(); if(p == pmain) printf("signal on sleeping main thread\n"); else if(p == ploop) printf("signal on cpu-chewing looper thread\n"); else printf("signal on %p\n", (void*)p); if(++nsig >= 10) exit(0); } static void* looper(void *v) { for(;;); } R=r CC=golang-dev https://golang.org/cl/4273113
-
Ian Lance Taylor authored
label.go:30:1: error: label ‘L6’ already defined label.go:28:1: note: previous definition of ‘L6’ was here label.go:23:1: error: label ‘L4’ defined and not used label.go:52:2: error: label ‘defalt’ defined and not used label.go:17:1: error: label ‘L2’ defined and not used label.go:26:1: error: label ‘L5’ defined and not used label.go:20:1: error: label ‘L3’ defined and not used label.go:14:1: error: label ‘L1’ defined and not used label1.go:32:13: error: invalid continue label ‘L2’ label1.go:44:13: error: invalid continue label ‘L3’ label1.go:52:10: error: invalid break label ‘L4’ label1.go:55:13: error: invalid continue label ‘L4’ label1.go:65:9: error: invalid break label ‘L5’ label1.go:68:12: error: invalid continue label ‘L5’ label1.go:76:10: error: invalid break label ‘L1’ label1.go:79:13: error: invalid continue label ‘L1’ R=rsc CC=golang-dev https://golang.org/cl/4275078
-
Ian Lance Taylor authored
Also fix comment. The only caller of chanrecv initializes the value to false, so this patch makes no difference at present. But it seems like the right thing to do. R=rsc CC=golang-dev https://golang.org/cl/4312053
-
Ian Lance Taylor authored
R=rsc CC=golang-dev https://golang.org/cl/4309049
-
Russ Cox authored
R=r CC=golang-dev https://golang.org/cl/4280060
-
Roger Pau Monné authored
Fixes #1639 R=golang-dev, bradfitzgo CC=golang-dev https://golang.org/cl/4291069
-
Russ Cox authored
R=adg, dfc, r CC=golang-dev https://golang.org/cl/4296042
-
Russ Cox authored
R=golang-dev CC=golang-dev https://golang.org/cl/4276077
-
- 24 Mar, 2011 5 commits
-
-
Devon H. O'Dell authored
R=golang-dev, adg CC=golang-dev https://golang.org/cl/4273102
-
Robert Griesemer authored
Correctly distinguish between lhs and rhs identifiers and resolve/declare them accordingly. Collect field and method names in respective scopes (will be available after some minor AST API changes). Also collect imports since it's useful to have that list directly w/o having to re-traverse the AST (will also be available after some minor AST API changes). No external API changes in this CL. R=rsc, rog CC=golang-dev https://golang.org/cl/4271061
-
Sameer Ajmani authored
Change M-x gofmt to display errors in a new buffer instead of clobbering the current buffer. Add gofmt-before-save, which runs gofmt when in go-mode. This can be used with before-save-hook. Add to your .emacs: (add-hook 'before-save-hook 'gofmt-before-save) R=rsc, aclements, amdragon CC=golang-dev https://golang.org/cl/4276059
-
Rob Pike authored
The top level bytes.Buffer is always there and can be re-used. Rpc goes from 83 to 79 mallocs per round trip. R=rsc CC=golang-dev https://golang.org/cl/4271062
-
Andrew Gerrand authored
R=rsc CC=golang-dev https://golang.org/cl/4285063
-