From: Dmitriy Vyukov Date: Mon, 22 Jul 2013 16:47:39 +0000 (+0400) Subject: runtime: allow stack split in body of closechan X-Git-Tag: go1.2rc2~977 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=10d1e55103c17f4b379729f2d6b40327cefea6be;p=gostls13.git runtime: allow stack split in body of closechan This gives more space during the call to runtime.lock. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/11679043 --- diff --git a/src/pkg/runtime/chan.c b/src/pkg/runtime/chan.c index 6aa9bd40e1..c750faba49 100644 --- a/src/pkg/runtime/chan.c +++ b/src/pkg/runtime/chan.c @@ -1214,10 +1214,27 @@ reflect·rselect(Slice cases, intgo chosen, uintptr word, bool recvOK) FLUSH(&recvOK); } +static void closechan(Hchan *c, void *pc); + // closechan(sel *byte); #pragma textflag 7 void runtime·closechan(Hchan *c) +{ + closechan(c, runtime·getcallerpc(&c)); +} + +// For reflect +// func chanclose(c chan) +#pragma textflag 7 +void +reflect·chanclose(Hchan *c) +{ + closechan(c, runtime·getcallerpc(&c)); +} + +static void +closechan(Hchan *c, void *pc) { SudoG *sg; G* gp; @@ -1235,7 +1252,7 @@ runtime·closechan(Hchan *c) } if(raceenabled) { - runtime·racewritepc(c, runtime·getcallerpc(&c), runtime·closechan); + runtime·racewritepc(c, pc, runtime·closechan); runtime·racerelease(c); } @@ -1264,14 +1281,6 @@ runtime·closechan(Hchan *c) runtime·unlock(c); } -// For reflect -// func chanclose(c chan) -void -reflect·chanclose(Hchan *c) -{ - runtime·closechan(c); -} - // For reflect // func chanlen(c chan) (len int) void