aboutsummaryrefslogtreecommitdiff
path: root/libgo/runtime/proc.c
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2016-10-12 15:38:56 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2016-10-12 15:38:56 +0000
commit543f217b7aea9a8cdc3b669c5ce7d56a1e944257 (patch)
treee893441fcdcea3e67f857c489e3e5cb2851da59e /libgo/runtime/proc.c
parent859e95abb84b67a2cb42d6e6013c16160d9c802d (diff)
downloadgcc-543f217b7aea9a8cdc3b669c5ce7d56a1e944257.zip
gcc-543f217b7aea9a8cdc3b669c5ce7d56a1e944257.tar.gz
gcc-543f217b7aea9a8cdc3b669c5ce7d56a1e944257.tar.bz2
runtime: copy Go 1.7 runtime semaphore code
This triggered a check in releaseSudog that g.param not nil, because libgo uses the param field when starting a goroutine. Fixed by clearing g->param in kickoff in proc.c. Reviewed-on: https://go-review.googlesource.com/30951 From-SVN: r241067
Diffstat (limited to 'libgo/runtime/proc.c')
-rw-r--r--libgo/runtime/proc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c
index 98c18a7..eb9e6c2 100644
--- a/libgo/runtime/proc.c
+++ b/libgo/runtime/proc.c
@@ -246,12 +246,15 @@ static void
kickoff(void)
{
void (*fn)(void*);
+ void *param;
if(g->traceback != nil)
gtraceback(g);
fn = (void (*)(void*))(g->entry);
- fn(g->param);
+ param = g->param;
+ g->param = nil;
+ fn(param);
runtime_goexit();
}